码迷,mamicode.com
首页 > 编程语言 > 详细

高性能的索引策略3-使用索引扫描做排序

时间:2020-01-28 09:31:12      阅读:85      评论:0      收藏:0      [点我收藏+]

标签:nbsp   技术   性能   通过   com   记录   info   限制   数据   

mysql有两种方式生成有序结果:

  • 通过排序操作 order by
  • 按照索引顺序扫描(explain 出来的type 为 index)

  扫描索引本身是很快的,因为只需要从一条索引记录移动到下一条索引记录即可。但是如果索引不能覆盖查询所需的全部列,那就不得不每扫描一条索引记录就得回表查询一次对应的行。这基本上就是随机IO。

因此,按照索引顺序读取数据的速度通常要比顺序全表扫描慢。

尽可能设计同一个索引技能满足排序,又可用于查找行。

mysql使用索引对结果排序的前提:

  • 索引的列顺序和order by 子句的顺序完全一致
  • 所有列的排序方向一致,同时都为asc 或者 desc
  • 如果查询需要关联多张表,则只有当order by 子句引用的字段全部为第一个表时
  • order by子句和查找型查询的限制一样:满足索引的最左前缀要求
    • 例外:当where子句或join子句中对索引的前导列指定为常量,则可以直接利用索引前导列之后的列进行排序,具体例子见下图:

技术图片

 

 技术图片

 

高性能的索引策略3-使用索引扫描做排序

标签:nbsp   技术   性能   通过   com   记录   info   限制   数据   

原文地址:https://www.cnblogs.com/wooluwalker/p/12237334.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!