• MySQL高级篇之索引分类


    索引分类

    分类含义特点关键字
    主键索引针对于表中主键创建的索引默认自动创建,只能有一个PRIMARY
    唯一索引避免同一个表中某数据列中的值重复可以有多个UNIQUE
    常规索引快速定位特定数据可以有多个
    全文索引全文索引查找的是文本中的关键词,而不是比较索引中的值可以有多个FULLTEXT

    InnoDB中索引的分类

    分类含义特点
    聚集索引将数据存储与索引放一块,索引结构的叶子节点保存了行数据必须有且只有一个
    非聚集索引将数据与索引分开存储,索引结构的叶子节点关联的是对应的主键可以存在多个

    1. 聚簇索引

    • 聚集索引又叫聚簇索引,每个 InnoDB 表都必须有且只有一个聚簇索引 ,聚簇索引使用 B+Tree 构建,叶子节点存储的数据是整行记录。InnoDB 创建索引的具体规则如下:

      • 在表上定义主键 PRIMARY KEY,InnoDB 将主键索引用作聚簇索引
      • 如果表没有定义主键,InnoDB 会选择第一个不为NULL的唯一索引(UNIQUE)列用作聚簇索引。
      • 如果主键索引和唯一索引都没有,InnoDB 会使用一个6 字节长整型的隐式字段 ROWID 字段构建聚簇索引。该 ROWID 字段会在插入新行时自动递增
    • 案例

      SELECT * FROM user_innodb WHERE id = 28;
      
      • 1
      • InnoDB 的数据和索引存储在一个文件 t_user_innodb.ibd 中。InnoDB 的数据组织方式是聚簇索引。

        1. 先在主键树中从根节点开始检索,将根节点加载到内存,比较28<75,走左路。(第一次磁盘IO)

        2. 将左子树节点加载到内存中,比较16<28<47,向下检索。(第二次磁盘IO)

        3. 检索到叶节点,将节点加载到内存中遍历,比较16<28,18<28,28=28。查找到值等于28的索引项,直接可以获取整行数据。将改记录返回给客户端。(第三次磁盘IO)

    2. 非聚簇索引

    • 非聚集索引又叫二级索引、辅助索引,除聚簇索引之外的所有索引都称为非聚集索引。在 InnoDB 中,辅助索引中的叶子节点存储的数据是该行的主键值。 在检索时,InnoDB 使用此主键值在聚簇索引中搜索行记录

    • 使用二级索引需要检索两遍索引:首先检索辅助索引获得主键,然后使用主键到聚集索引中检索获得整行记录

    • 案例

      SELECT * FROM t_user_innodb WHERE age=19;
      
      • 1
      • 根据在辅助索引树中获取的主键 id,到主键索引树检索数据的过程称为回表查询。磁盘IO数:辅助索引3次+获取记录回表3次

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HrTHvA0Z-1662625446202)(C:/Users/10642/AppData/Roaming/Typora/typora-user-images/image-20220902143600943.png)]

  • 相关阅读:
    源来Intel——开放原子全球峰会
    Linux用户和权限学习笔记
    Python基础语法规则和Java不同的地方
    错误方法修改用户名后,开机提示无法登录到你的账户的正确解决方法
    python note
    基于汇编实现的流载体的LSB隐藏项目
    推荐一款Python接口自动化测试数据提取分析神器!
    测试十大法则
    华为小型智能园区网络解决方案
    函数的分文件编写
  • 原文地址:https://blog.csdn.net/qq_52248567/article/details/126767097