我该如何索引与此查询对应的表?

时间:2011-08-29 00:14:32

标签: php mysql indexing

所以我有以下问题:

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'

1 个答案:

答案 0 :(得分:0)

你有一堆聚合函数和一个order by子句。

1)我至少从d.iID2上的索引开始,r.rID来自d.iID2 = r.rID 2)关于r.aID的索引也不会伤害......

除此之外,聚合,按顺序和&lt;&gt;几乎控制其余的。检查慢查询日志,看看是否也在那里。如果使用了很多查询,请考虑启用缓存和/或使其成为存储过程。