大部分查询中都要使用到order by。那么处理排序的方法有两种:一种是使用索引,另外一种则是查询时候使用filesort处理。
1. 利用索引进行排:
2. 利用内存或者磁盘排序算法:
优点
缺点
使用索引
执行insert,update,delete查询时,索引已经排序好,只需要依次读取即可,处理速度快
1.处理insert,update,delete时需要额外添加索引,所以很慢 2.索引需要更多的磁盘空间需要合理的规划好 3.索引个数越多,越需要更多innodb缓冲池
使用filesort
1.因不必创建索引,故无使用索引时那么多的缺点 2.若要排序的记录不多,在内存中进行filesort处理,速度也非常快
1.因为要在执行查询时进行排序处理,目标的数据越多,则响应的速度会越慢
排序的基准太多,无法依据某个基准创建索引
要对group by 的结果或者distinct的结果进行排序时
对临时表的结果(union union all[5.7进行优化没有临时表的出现])重新排序时
表结构:
1.使用索引进行排序:
2.使用single pass:
3.two pass
优先选择第一种using index 的排序方式,在第一种方式无法满足的情况下,尽可能让 mysql 选择使用第二种单路算法来进行排序。这样可以减少大量的随机io操作,很大幅度地提高排序工作的效率。
1、去掉不必要的字段
2、加大max_length_for_sort_data 参数的设置
3、增大sort buffer的设置