MySQL排序详解

  • MySQL支持两种方式排序filesort和index

  • index是指扫描索引本身完成排序,index效率高

  • filesort是指通过内存或者排序文件完成排序,filesort效率低

  • order by满足两种情况时会使用index排序

    • order by语句使用索引最左列
    • where条件字段和order by字段组合满足索引最左列
  • sort_buffer_size配置
    • 给每个回话分配排序操作的缓冲区大小
    • 当需要排序的数据>大于该配置时,MySQL使用磁盘文件排序
  • filesort支持两种排序方式单路排序和双路排序
  • filesort单路排序:一次行去除满足条件的所有字段,然后进行排序
  • filesort双路排序:根据相应的条件取出排序字段和主键id,进行排序,排序完成后根据主键id回表查询其余信息
  • max_length_for_sort_data配置
    • 当查询单行数据长度小于该配置时使用单路排序
    • 大于该配置时使用双路排序

使用mysql trace信息观察排序方式

  • 单路排序
  • 调整max_length_for_sort_data观察双路排序
  • 当sort_buffer_size配置大时,可适当调大max_length_for_sort_data,让查询尽量走单路排序,避免其回表查询
  • 当sort_buffer_size配置小时,可适当调小max_length_for_sort_data,让查询尽量走双路排序,避免使用磁盘文件排序
相关推荐
睡觉的时候不会困3 小时前
Redis 主从复制详解:原理、配置与主从切换实战
数据库·redis·bootstrap
程序员的世界你不懂5 小时前
【Flask】测试平台开发,新增说明书编写和展示功能 第二十三篇
java·前端·数据库
自学也学好编程5 小时前
【数据库】Redis详解:内存数据库与缓存之王
数据库·redis
福赖5 小时前
《MySQL基础——用户管理》
mysql·用户管理
JAVA不会写5 小时前
在Mybatis plus中如何使用自定义Sql
数据库·sql
IT 小阿姨(数据库)5 小时前
PgSQL监控死元组和自动清理状态的SQL语句执行报错ERROR: division by zero原因分析和解决方法
linux·运维·数据库·sql·postgresql·centos
ChinaRainbowSea6 小时前
7. LangChain4j + 记忆缓存详细说明
java·数据库·redis·后端·缓存·langchain·ai编程
小马学嵌入式~7 小时前
嵌入式 SQLite 数据库开发笔记
linux·c语言·数据库·笔记·sql·学习·sqlite
Java小白程序员7 小时前
MyBatis基础到高级实践:全方位指南(中)
数据库·mybatis
Monly217 小时前
人大金仓:merge sql error, dbType null, druid-1.2.20
数据库·sql