• 知识点 1: MySQL的回表


    1:聚簇索引和非聚簇索引是什么?

    MySQL 的索引有不同的角度的分类方式,例如:按数据结构分、按逻辑角度分、按物理存储分

    其中,按物理存储分有两种索引:聚簇索引和非聚簇索引。

    简单来说,聚簇索引是主键索引。

    主键索引之外的就是非聚簇索引,非聚簇索引又叫辅助索引或者二级索引。


    2
    主键索引和非主键索引有什么区别?

    相同点:都使用的是 B+Tree 

    不同点:叶子节点存储的数据不同

      主键索引的叶子节点存储的是一行完整的数据;

      非主键索引的叶子节点存储的是主键值。叶子节点不包含记录的全部数据,非主键的叶子节点除了用来排序的 key 还包含一个书签(bookmark),其中存储了聚簇索引的 key。

    那么这两种索引在使用方面上有什么区别呢?

      使用主键索引查询

    # 主键索引的的叶子节点存储的是**一行完整的数据**,
    # 所以只需搜索主键索引的 B+Tree 就可以轻松找到全部数据
    select * from user where id = 1;

        使用非主键索引查询

     非主键索引的叶子节点存储的是**主键值**,
    # 所以MySQL会先查询到 name 列的索引的 B+Tree,搜索得到对应的主键值
    # 然后再去搜索该主键值查询主键索引的 B+Tree 才可以找到对应的数据
    select * from user where name = 'Jack';
    ————————————————
    版权声明:本文为CSDN博主「普通网友」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/m0_67403073/article/details/126080893

    可以看出使用非主键索引要比主键索引多使用一次 B+Tree。

    3:B-Tree 和 B+Tree 的简单理解

       

     名字: 指向记录的指针    叶子节点  内部节点    指针连接在一起

    1. B+树中只有叶子节点会带有指向记录的指针,而B树则所有节点都带有,B树在内部节点出现的索引项不会再出现在叶子节点中。
    2. B+树中所有叶子节点都是通过指针连接在一起,而B树不会

     ----理解:

    B+Tree是B树的变种,有着比B树更高的查询性能,来看下m阶B+Tree特征:

    1、有m个子树的节点包含有m个元素(B-Tree中是m-1)

    2、根节点和分支节点中不保存数据,只用于索引,所有数据都保存在叶子节点中。

    3、所有分支节点和根节点都同时存在于子节点中,在子节点元素中是最大或者最小的元素。

    4、叶子节点会包含所有的关键字,以及指向数据记录的指针,并且叶子节点本身是根据关键字的大小从小到大顺序链接。

    4:如何避免回表?

    使用覆盖索引,所谓覆盖索引就是指索引中包含了查询中的所有字段,这种情况下就不需要再进行回表查询了

    详解:知识点2 

    MySQL优化:如何避免回表查询?_什么是索引覆盖?

  • 相关阅读:
    [ios] 分辨率
    [bat] 图片裁剪工具ImageMagick
    [ASP.NET] 调用32位ORACLE错误
    [Linux] 开启ESX的SSH
    [Linux] 关机和重启命令
    [.net] 关于CS0016: Could not write to output file ‘c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files… ‘Access is denied.’ 的解决办法
    [linux] XEN里面的虚拟机centos无法使用date s设置时间
    字符串替换,string的强大
    C语言学习笔记(1)
    C语言学习笔记(8)
  • 原文地址:https://www.cnblogs.com/liyanxi/p/16729632.html
Copyright © 2020-2023  润新知