MySQL中order by的实现原理
共 970字,需浏览 2分钟
·
2021-03-26 10:42
点击上方蓝色字体,选择“标星公众号”
优质文章,第一时间送达
全字段排序
MySQL会给每个线程分配一块内存用于排序,称为sort_buffer。
语句的执行流程:
(1)初始化sort_buffer,确定放入select的字段
(2)找到满足条件的行取出select的字段存入sort_buffer中
(3)一直查找到不满足条件的为止
(4)对sort_buffer中的数据按照排序的字段做排序
sort_buffer_size可以设置sort_buffer的大小。如果要排序的数据量小于 sort_buffer_size,排序就在内存中完成。但如果排序数据量太大,内存放不下,则不得不利用磁盘临时文件辅助排序。
rowid排序
max_length_for_sort_data,是 MySQL 中专门控制用于排序的行数据的长度的一个参数。它的意思是,如果单行的长度超过这个值,MySQL 就认为单行太大,要换一个算法。
语句执行流程:
(1)初始化sort_buffer,确定放入id和要排序的字段
(2)找到满足条件的行取出这两个字段存入sort_buffer中
(3)一直查找到不满足条件的为止
(4)对sort_buffer中的数据按照排序的字段做排序
(5)遍历排序结果,并按照id的值回表取出select的字段
如果MySQL认为内存足够大就会使用全字段排序,否则会使用rowid排序。对于 InnoDB 表来说,rowid 排序会要求回表多造成磁盘大量随机读,因此不会被优先选择。
————————————————
版权声明:本文为CSDN博主「mangoBUPT」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:
https://blog.csdn.net/mcmango/article/details/115041208
粉丝福利:Java从入门到入土学习路线图
👇👇👇
👆长按上方微信二维码 2 秒
感谢点赞支持下哈