代码编织梦想

排序如何优化?如何避免排序?Using filesort
单列索引树,就是按照索引列进行排序的;
联合索引(a, b),先按照 a 字段进行排序,a 字段相同的情况下,再按照 b 字段进行排序。
所以,如果排序的字段上面刚好有索引,并且可以走这个索引的话,那么就不需要再排序了,避免排序了。
但是并不能保证走索引,避免排序,查询的性能就一定高,如果数据量大的情况下,大量的回表操作,执行的速度有可能还不如全表扫描 + 排序
当然,如果符合覆盖索引,就不用回表了。
如果排序的字段上面没有索引,那么就只能进行排序了,内存排序,文件排序。

假设,sort_buff er 最多只能存储 100 行记录。sort_buffer 默认大小是 256K

当记录小于 100 行的时候,一次性读进sort_buffer,进行排序,排序完成之后,就可以直接返回了,这种情况就是 using tempory,使用内存排序,并没有使用文件排序。
当记录大于 100 行的时候,比如说有 1000 行,sort_buffer 一次性放不下,只能一次排序 100 行,然后将排序后的结果放进一个临时文件里面,file1,然后再对 101 - 200 行进行排序,然后将排序结果再放进一个临时文件里面,file2…最后,将排好序的 10 个文件,进行归并排序merge合并一下
这里的思想,跟一道面试题一样:只有 2 G 的内存,你要排序 8 G的数据,怎么做?

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Sherlook_Holmes/article/details/130832105

【选择排序】-爱代码爱编程

选择排序介绍 ● 选择排序是一种简单直观的排序算法 ● 无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。 ● 唯一的好处可能就是不占用额外的内存空间 步骤 ● 首先在未排序序列中找到最小(