阳光网驿-企业信息化交流平台【DTC零售连锁全渠道解决方案】

 找回密码
 注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

手机号码,快捷登录

老司机
查看: 1051|回复: 0

[转帖] GROUP BY 操作的优化

[复制链接]
  • TA的每日心情
    开心
    2012-3-7 10:15
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2012-1-12 09:58:45 | 显示全部楼层 |阅读模式
    默认情况下, MySQL 在执行 GROUP BY col1 , col2.... 操作的时候,会按照 GROUP BY 字段的顺序进行排序。如果显式包括一个包含相同的列的 ORDER BY 子句,则对 MySQL 的实际执行性能没有什么额外的影响。

    如果查询包括 GROUP BY 操作, 但是不需要对结果进行排序,或者对默认的排序结果不满意,希望获得结果后再由程序进一步处理的时候,可以指定 ORDER BY NULL 禁止排序,从而避免排序结果的消耗。

    下面介绍的例子对比了开启 / 关闭 GROUP BY 排序的执行计划:

    mysql> desc select dep,pos,avg(sal) from employee group by dep,pos G

    *************************** 1. row ***************************

    id: 1

    select_type: SIMPLE

    table: employee

    type: ALL

    possible_keys: NULL

    key: NULL

    key_len: NULL

    ref: NULL

    rows: 10

    Extra: Using temporary; Using filesort

    1 row in set (0.00 sec)

    mysql> desc select dep,pos,avg(sal) from employee group by dep,pos order by null G

    *************************** 1. row ***************************

    id: 1

    select_type: SIMPLE

    table: employee

    type: ALL

    possible_keys: NULL

    key: NULL

    key_len: NULL

    ref: NULL

    rows: 10

    Extra: Using temporary

    1 row in set (0.00 sec)

    从执行计划可以看到,使用了 ORDER BY NULL 的 SQL 减少了文件排序的步骤,当返回结果集很大时,对于 GROUP BY 的性能是有很大改善的。
    楼主热帖
    启用邀请码注册,提高发帖质量,建设交流社区
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表