2013-07-25 160 views
1

我有一个非常复杂的mysql查询,我试图了解是否有办法让它使用索引。查询看起来像:优化MySQL查询:join,where,group by,

SELECT t1.a, t1.b, t2.c, COUNT(t1.li), SUM(t1.tc) 
FROM t1 LEFT JOIN t2 
ON (t1.d=t2.d AND t1.e=t2.e) 
WHERE t1.pt="XXX" GROUP BY t1.a, t1.b, t2.c 
HAVING t1.li > 0 AND t1.tc > 4; 

我只能够得到它使用优化上t1.pt索引(或“WHERE”条款),但不能让GROUP BY部分走得更快。

当分组来自两个表的列时,有没有办法让GROUP BY使用索引?

回答

1

首先,你应该添加索引到两个表的联接字段:

t1.d, t2.d, t1.e, t2.e 

然后领域

t1.a, t1.b, t2.c 
在HAVING部分,我想你应该写

同时添加索引组:

HAVING count(t1.li) > 0 AND sum(t1.tc) > 4; 
+0

谢谢。你对HAVING部分是正确的。我按照你的建议做了,但是EXPLAIN仍然给了我:“使用where;使用temporary;使用filesort”,所以我猜GROUP BY部分仍然不使用任何索引。是否有可能使用它? – nickb