我的这个查询需要 45 秒才能执行。我对正在搜索的所有字段都有索引。
SELECT SQL_CALC_FOUND_ROWS g.app_group_id, g.id as g_id, p.`id` as form_id,
a.`user` as activity_user,a.`activity` as app_act ,a.*
FROM grouped g
INNER JOIN
(SELECT max(id) as id, app_group_id FROM grouped GROUP BY app_group_id) g1
ON g1.app_group_id = g.app_group_id AND g.id = g1.id
INNER JOIN form p
on p.id = g.id
INNER JOIN
(SELECT a.id, a.date_time, a.user, a.activity FROM log a) a
ON g.id = a.id
WHERE p.agname like '%blahblah%' and p.`save4later` != 'y'
and a.activity = 'APP Submitted' or a.activity = 'InstaQUOTE'
ORDER BY app_group_id DESC limit 0, 100
在我的解释中,它显示我正在使用“使用临时”;使用文件排序
索引是:
事件表:PRIMARY Activity_id INDEX date_time INDEX id INDEX Activity INDEX user
表格:PRIMARY id INDEX id_md5 INDEX dateadd INDEX dateu INDEX agent_or_underwriter INDEX
分组表:UNIQUE id INDEX app_group_id INDEX agent_or_underwriter save4later
非常感谢任何建议
非常感谢
最佳答案
首先,尝试一下这个:
SELECT
g.app_group_id,
g.id AS g_id,
p.id AS form_id,
a.user AS activity_user,
a.activity AS app_act,
a.id,
a.date_time
FROM grouped g
INNER JOIN
(SELECT MAX(id) AS id, app_group_id FROM grouped GROUP BY app_group_id) g1
ON g1.app_group_id = g.app_group_id AND g.id = g1.id
INNER JOIN form p
ON p.id = g.id
INNER JOIN log a
ON g.id = a.id
WHERE p.agname LIKE '%blahblah%'
AND p.save4later != 'y'
AND a.activity IN('APP Submitted', 'InstaQUOTE')
LIMIT 0, 100
我删除了一个不必要的子查询。还删除了 ORDER BY
。我想你可以不排序,这一定会大大加快查询速度。
我还删除了 SQL_CALC_FOUND_ROWS
,因为正如我之前提到的,发出单独的 COUNT(*)
查询应该会更快。
关于MySql性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10230931/