MySQL中的排序

MySQL中的排序

曾经以为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页)

发表评论

电子邮件地址不会被公开。 必填项已用*标注


*

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>