所以我有以下查询:
SELECT d.iID1 as 'id',
SUM(d.sum + d.count*r.lp)/sum(d.count) AS avgrat
FROM abce r, abcf d
WHERE r.aID = 1 AND
d.iID1 <> r.rID AND d.iID2 = r.rID GROUP BY d.iID1
ORDER BY avgrat;
表abcf目前有超过130217行,表abce目前有5284行....这个查询大约需要7秒来执行....
我应该如何在这个查询中涉及的表上添加索引以加快查询速度?我应该在哪些列上放置什么类型的索引?
解释输出:
id, select_type, table, type, possible_keys, key, key_len, ref, rows, Extra
1, 'SIMPLE', 'd', 'ALL', '', '', '', '', 130217, 'Using temporary; Using filesort'
1, 'SIMPLE', 'r', 'ALL', '', '', '', '', 5611, 'Using where; Using join buffer'
您有一堆聚合函数和一个order by子句。
1)我至少从d.iID2 =r.rID的d.iID2, r.rID的索引开始2)在r.aID上建立一个索引也无妨……
除此之外,聚合、排序和<>基本上控制了其余部分。检查慢速查询日志,看看它是否也在那里。如果这个查询经常使用,请考虑打开缓存和/或使其成为一个存储过程。