因为它既用到临时表,又默认用到排序。有时候还可能用到磁盘临时表。
慢sql的原因:
-
如果执行过程中,会发现内存临时表大小到达了上限(控制这个上限的参数就是
tmp_table_size
),会把内存临时表转成磁盘临时表。 -
如果数据量很大,很可能这个查询需要的磁盘临时表,就会占用大量的磁盘空间。
-
解决方案
-
1.1 group by 后面的字段加索引
-
如何保证
group by
后面的字段数值一开始就是有序的呢?当然就是加索引啦 - 2.1 order by null 不用排序
-
2.2 尽量只使用内存临时表 调大
tmp_table_size
参数,来避免用到磁盘临时表 -
5.4 使用SQL_BIG_RESULT优化