提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
`mysql中排序底层逻辑
一、语法
select [column1], [clolumn2] from [database].[table] order by [order_column1] [desc/asc],[order_column2] [desc/asc]
二、场景
数据查询结果按照指定的排序列升序或降序排列,排序列值相同时按照后一列排序值进行排序,全部相同按照数据的物理顺序返回,如聚簇索引按照主键升序返回。
三、与其他语法结合
group by
进行分组查询数据,未指定按分组字段排序时,会按照物理顺序返回,结果会不符预期
limit offset
分页时如果未指定唯一的排序列,即存在排序列相等的记录,结果可能不稳定
四、排序底层流程
- 排序列是否命中索引
- 命中索引按照索引的结果进行排序
- 未命中索引会生成临时表
- 数据量小,临时表包含排序列与记录指针,通过指针回表
- 数据量大,临时表包含筛选记录的筛选列,直接返回
五、索引
校验是索引排序还是临时表排序
explain [sql], 结果中extra列存在 using filesort, 代表未使用索引排序
命中索引规则
最左前缀原则,排序列循序必须与索引顺序一致,同时不能升序降序混用