【问题标题】:Optimizing MySQL query with: join, where, group by, having使用以下方法优化 MySQL 查询:join、where、group by、have
【发布时间】:2013-07-25 07:11:18
【问题描述】:

我有一个非常复杂的 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 使用索引?

【问题讨论】:

    标签: mysql indexing group-by left-join


    【解决方案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;
    

    【讨论】:

    • 谢谢。您对 HAVING 部分是正确的。我按照你的建议做了,但 EXPLAIN 仍然给我:“使用 where;使用临时;使用文件排序”所以我猜 GROUP BY 部分仍然不使用任何索引。有没有可能让它使用一个?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多