MySQL-mysql group by 分组2个字段的效率

MySQL-mysql group by 分组2个字段的效率

清晨说ぺ晚安 发布于 2017-03-30 字数 588 浏览 1329 回复 2

数据库中的一个表:类型MyISAM, 数据 1.4GB, 数据条数400多万条。
现在遇到的问题是进行group by a列, b列 的时候效率非常低,不优化表结构的同时还有其它的优化方法么?
以下是query与profiles的截图:

query

profiles

@lazyboy

性能上没有提升,请看测试截图:

profiles2

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

甜柠檬 2017-07-10 2 楼

Mysql里, group by一般是先生成一个临时表, 在这个临时表上做分组和聚集操作.
其实很明显的, profile结果里, copy to tmp table占了22秒,其他所有操作加起来不超过0.01秒.
如果有合适的索引, group by可以直接利用索引分组, 无需临时表.
http://dev.mysql.com/doc/refman/5.6/en/group-by-optimization.html

我猜package_version,package_name上没有建索引. 建议在package_version,package_name上建联合索引。这样 仅过索引就可以完成查询,应该会很快。

归属感 2017-04-27 1 楼

如果在group by只是count的话,可以尝试sum(1)

另外group by 列1,列2的话会隐式调用order by 列1,列2,你可以加上order by null阻止排序