• 【Mysql】 InnoDB引擎深入- 二级索引、联合索引、回表、索引覆盖


    接着上面文章内容对数据页的详细介绍以及聚集索引原理的了解【Mysql】 InnoDB引擎深入 - 数据页 | 聚集索引,有了这个知识前提,对了解二级索引、联合索引等相关内容的理解就变得非常简单了。

    二级索引(又名辅助索引、普通索引、非聚集索引),叶子节点不包含行记录的全部数据。叶子节点除了键值(索引建)之外,每个叶子节点中还包含了一个书签,该书签就是用来告诉引擎哪里可以找到该条记录的所有行数据,在InnoDB中该书签就是聚集索引建一般来说也就是聚集索键。

            通俗来说,二级索引跟聚集索引有着一样的树结构,根据索引建顺序构建索引树(如果是字符性字段会根据不同的字符集运算后进行排序,所以字符集不一致的字段或表,可能会导致索引失效),不同的是其叶子节点不包括行记录所有数据,只有定义的索引键以及聚集索引键(通常就是主键),目的就是通过二级索引树查询时,首先查到的并不是行数据,而是该行的聚集索引建,然后通过该聚集索引键通过 聚集索引树 查找行数据。

                                    

     

    回表:像上述描述的当一个sql查询时,需要两个索引树进行查找时,这样的过程被称为回表。所以中尽量减少回表过程也是一种优化手段。

    索引覆盖(覆盖索引):那为了减少回表过程,可以进行索引覆盖,也就是说只通过一个索引树就能拿到需要的数据。比如 select * 修改为 select aa 而 aa就是二级索引,这样就可以直接在二级索引叶子中拿到需要的字段,从而不需要再次进行回表操作,那这样的情况为称为索引覆盖,或者叫覆盖索引。

    联合索引: 联合索引也属于二级索引,只是它可以定义多个键组合使用,也就是对表上多个列进行索引。主要注意的是:因为索引需要根据顺序来完成索引树的建立,所以多个字段必须按照从左到右的顺序进行排序,这也就是常说的最左前准原则

    ​ 比如: 1-1-1 (A,B,C 三个字段)

    ​ 1-2-2

    ​ 2-3-2

    ​ 这样的字段三个字段的组合,必须现根据A排序后,才能对B进行排序,A,B都确定顺序后才能对C进行排序。因此在使用联合索引时一定要遵循最左前缀原则,比如 where A = * 、where A = * AND B = * 可以使用索引,但是 where B = * .... 是会索引失效,因为在没有确定A的情况下,B也是无须的,而索引原理就是通过顺序进行树的查询。

  • 相关阅读:
    python笔记Ⅶ--函数返回值、作用域与命名空间、递归
    mini-vue 代码块
    spring.profiles.active 未生效问题解决
    使用 elasticdump 跨版本迁移 ES 数据
    SAP CO系统配置-获利能力分析
    KubeEdge SIG AI发布首个分布式协同AI Benchmark调研
    Spring Boot整合Swagger
    Coremail&奇安信2021邮箱安全报告:正常邮件数量首超普通垃圾邮件,防护初见成效
    对HTTP和HTTPS的介绍
    【广州华锐互动】VR虚拟党建云展馆:带你沉浸式领略红色文化
  • 原文地址:https://blog.csdn.net/qq_31142237/article/details/125447782