曾经以为filesort是文件排序,后来知道这仅仅是一个排序,文件只是路人甲而已 前些日子从china-pub上买了《Mysql核心内幕》,当浏览到第4章时,以前对MySQL的排序,join buffer不理解的地方,忽然觉得懂了,只是不知道这个懂了是真懂了还是假懂了。 就如当你从一个梦中醒来,难道你就确认你一定不是在做梦了吗? 说说看了什么吧, filesort排序算法是将一组记录或元素按照快速排序算法放入到内存缓存,然后这几个内存缓存按合并排序算法排序。(摘自《Mysql核心内幕》第82页) filesort有两种模式: 1、直接模式, 将已经数据完全读取出来,然后进行排序 2、指针模式, 先根据过滤条件取出排序字段(sort_key)和可以行指针信息(row_id),根据sort_key排序后,再依据row_id取出取出查询中所请求的其他字段。 第一种算法的优势是减少了数据的二次访问,当然会消耗更多的内存,在算法上来讲是以空间换时间。 MySQL会尽量采用每一种方式,只有在每一种方式不行的情况下才会采用第二种方式(即指针模式) 然后是MySQL的三种排序方法: 1、使用索引排序 2、在单表上使用filesort排序 3、先使用临时表,再使用filesort排序 (摘自《Mysql核心内幕》第83页)
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did7866