zoukankan      html  css  js  c++  java
  • MySQL 使用索引扫描来做排序

      MySQL有两种方式可以生成有序的结果:通过排序操作;或者按照索引顺序扫描;如果EXPLAIN 出来的结果的type列的值为“index”,则说明MySQL使用了索引扫描来做排序(不要和Extra列的“Using index”搞混)。

      扫描索引本身是很快的,因为只需要从一条索引记录移动到紧接着的下一条记录。但如果索引不能覆盖查询所需要的全部列,那就不得不没扫描一条索引记录就回表查询一次对应的行。这基本上都是随机的io,因此按索引顺序读取数据的速度通常要比顺序的全表扫描慢,尤其是在io密集型的工作负载时。

      MySQL可以使用同一个索引既满足排序,又用于查找行。因此,如果可能,设计索引时应该尽可能地同时满足这两种任务,这样是最好的。

      只有当索引的列顺序和order by 子句的顺序完全一致,并且所有列的排序方向(倒序或正序)都一致时,MySQL才能使用索引来对结果做排序。如果查询需要关联多张表,则只有当order by 子句引用的字段全部为第一个表时,才能使用索引做排序。order by子句和查找型查询的限制是一样的:需要满足索引的最左缀的要求,否则,MySQL都需要执行排序操作,而且无法利用索引排序。

      有一种情况下order by 子句可以不满足最左前缀的要求,就是前导列为常量的时候。如果WHERE 子句或者JOIN子句中对这些列指定了常量,就可以弥补索引的不足。  

      

        

  • 相关阅读:
    ionic 白名单
    简单的apk Ionic
    Ionic 小节
    Ionic学习笔记四 一些问题处理
    Android Platform Guide
    Android各个版本 版本号对应关系表
    JBPM4.4_管理流程定义
    JBPM4.4_核心概念与相关API
    工作流JBPM_day01:3-使用JBPM的API添加与执行流程
    工作流JBPM_day01:2-HelloWorld
  • 原文地址:https://www.cnblogs.com/zhengyanqiu/p/4993291.html
Copyright © 2011-2022 走看看