优化MySQL查询:join,where,group by,having

时间:2013-07-25 07:11:18

标签: mysql indexing group-by left-join

我有一个非常复杂的mysql查询,我试图了解是否有办法让它使用索引。查询如下所示:

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 个答案:

答案 0 :(得分: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;