ITPub博客

首页 > 数据库 > MySQL > MySQL:排序(filesort)详细解析

MySQL:排序(filesort)详细解析

原创 MySQL 作者:gaopengtttt 时间:2020-01-09 12:14:19 0 删除 编辑

能力有限有误请指出。本文使用源码版本:5.7.22 引擎为:Innodb

欢迎关注我的《深入理解MySQL主从原理 32讲 》,如下:

image.png

如果图片不能显示可查看下面链接:
https://www.jianshu.com/p/d636215d767f


排序(filesort)作为DBA绕不开的话题,也经常有朋友讨论它,比如常见的问题如下:

  • 排序的时候,用于排序的数据会不会如Innodb一样压缩空字符存储,比如varchar(30),我只是存储了1个字符是否会压缩,还是按照30个字符计算?
  • max_length_for_sort_data/max_sort_length 到底是什么含义?
  • original filesort algorithm(回表排序) 和 modified filesort algorithm(不回表排序) 的根本区别是什么?
  • 为什么使用到排序的时候慢查询中的Rows_examined会更大,计算方式到底是什么样的?

在MySQL通常有如下算法来完成排序:

  • 内存排序(优先队列 order by limit 返回少量行常用,提高排序效率,但是注意order by limit n,m 如果n过大可能会涉及到排序算法的切换)
  • 内存排序(快速排序)
  • 外部排序(归并排序)

但是由于能力有限本文不解释这些算法,并且本文不考虑优先队列算法的分支逻辑,只以快速排序和归并排序作为基础进行流程剖析。
我们在执行计划中如果出现filesort字样通常代表使用到了排序,但是执行计划中看不出来下面问题:

  • 是否使用了临时文件。
  • 是否使用了优先队列。
  • 是original filesort algorithm(回表排序)还是modified filesort algorithm(不回表排序)。

如何查看将在后面进行描述。本文还会给出大量的排序接口供敢兴趣的朋友使用,也给自己留下笔记。

一、从一个问题出发

(本文不知道为什么不能发到ITPUB )全文地址如下:

https://www.jianshu.com/p/069428a6594e MySQL:排序(filesort)详细解析

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7728585/viewspace-2672626/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
wxh gp_22389860 <<深入理解MySQL主从原理专栏>> 发布 可加WX了解

注册时间:2008-10-13

  • 博文量
    718
  • 访问量
    3039435