Mysql的排序小结

当需要排序的字段无法通过索引查找直接完成时,MySQL会为排序分配一块内存(sort buffer)。该buffer的大小可以通过参数sort_buffer_size来设置。MySQL遵循“多利用内存,尽量减少磁盘访问”的设计原则。当sort buffer不足以完成需要的排序时,MySQL会利用磁盘临时文件来辅助排序(使用归并排序算法)。
通过设置max_length_for_sort_data参数可以让MySQL调整排序时所用的算法:

1) 当需要返回的字段组的大小小于设定的max_length_for_sort_data参数时,MySQL执行的是全字段排序。也就是说,MySQL会先找到满足条件的、包含所有select字段的所有记录,将它们放到sort buffer(或是磁盘临时辅助文件)中,然后执行排序,再返回排序后的结果;

2) 当需要返回的字段组的大小大于设定的max_length_for_sort_data参数时,MySQL执行的是rowid排序。也就是说,放到sort buffer(或磁盘临时辅助文件)中的数据记录只包含row id和需要排序的字段,排完序后,再根据排序后的结果row id回到主表取出相应的其它要求返回的字段值,再返回给调用方。这种情况下会多出回主表查其它字段数据的过程。

猜你喜欢

转载自blog.csdn.net/weixin_33772645/article/details/87165524
今日推荐