所以我有以下问题:
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秒才能执行....
我应该如何在此查询中涉及的表中放入索引以加快速度?我应该放入哪种类型的索引以及哪些列?
EXPLAIN输出:
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'
答案 0 :(得分:0)
你有一堆聚合函数和一个order by子句。
1)我至少从d.iID2上的索引开始,r.rID来自d.iID2 = r.rID 2)关于r.aID的索引也不会伤害......
除此之外,聚合,按顺序和&lt;&gt;几乎控制其余的。检查慢查询日志,看看是否也在那里。如果使用了很多查询,请考虑启用缓存和/或使其成为存储过程。