• mysql 索引


    为什么要使用索引?

    我们可以将索引理解为书的目录,通过索引可以使查询效率更高。

    主键默认是添加索引的。

    什么是索引?

    索引是帮助 MySql 高效获取数据的数据结构

    例如:主键 。 主键会默认添加索引。
    主键维护在一个 B+ 树中,保持这条记录的物理地址。

    索引的优劣势

    优势:

    • 提高了查询效率(有 B+ 数排序,把索引数据加载到内存中),减少了 IO 次数。
    • 索引使用 B+ 树结构,是有序的,排序是比较快捷方便,减少了CPU 的消耗。

    劣势:

    • 索引需要空间来存储和维护
    • 执行新增、修改、删除操作时,需要对索引进行结构的更新

    添加索引的原则

    1.哪些情况适合建立索引?

    1. 主键:默认添加唯一索引
    2. 作为查询条件的列
    3. 作为外键关联的列
    4. 排序的列
    5. 分组的列

    2.哪些情况不适合添加索引?

    1. 表记录很少的(例如系统参数设置表)
    2. 不作为查询条件的列
    3. 增删改较为频繁的表,最好为需要的列来添加
    4. 数据重复度较高的(如性别)

    索引分类

    1. 主键索引
      primary key 主键列自动会添加索引
    2. 单值索引/单列索引
      一个索引对应一个列
    3. 唯一索引
      列的值是唯一性的
    4. 组合索引
      一个索引中包含多个列
    5. 组合索引最左前缀原则
      例如:a、b、c 3列,a、b 列创建了组合索引,在查询时,必须要满足最左侧索引原则,否则索引失效。(最左侧索引原则:在使用组合索引时,最左侧的列必须被使用到,否则索引失效)
    6. 全文索引
      mysql 8 之后 innodb 引擎开始支持全文索引,使用全文索引可以代替 like 实现模糊查询,索引不会失效。

    mysql 索引的数据结构

    在这里插入图片描述

    mysql 索引使用 B+ 树结构存储索引

    B+ 树是有序的,每个节点可以存储多个数据(横向扩展)
    非叶子节点不存储数据,只存储索引,一个节点中就可以存储多个索引
    所有的数据存储在叶子节点中,每个叶子节点之间有指针指向

    使用索引有序的节省了排序时间,一个节点中可以存储多个元素,从而使树高度降低了,并且叶子节点之间有指针,便于区间范围查询。

    聚簇索引和非聚簇索引

    聚簇索引:找到索引就找到了数据。

    例如:innodb 引擎。索引和数据在同一个文件中,找到索引也就可以找到数据。(使用主键作为条件进行查询;如果使用其他列进行查询的话,查询的结果就只有自己)

    非聚簇索引:找到了索引以后,还需要回表查询。

    例如:myisam 引擎。索引和数据不在同一个文件中,找到索引后,就要去存储数据的文件中查找数据。

    innodb 非聚簇:使用其他列作为条件进行查询,查询结果除了本列以外还有其他列的内容,这种情况就需要通过该列先查询到主键,然后通过主键再次回表查询数据。

  • 相关阅读:
    CodeTON Round 6 (Div 1 + Div 2, Rated, Prizes!)(A - E)
    低密度奇偶校验码LDPC(十)——LDPC码的密度进化
    信息学奥赛一本通:1108:向量点积计算
    一文教会你使用Git Tag
    js基础笔记学习257location
    深度学习-BN(Batch Normalization)
    使用containerd搭建MinIO集群服务
    C++ Reference: Standard C++ Library reference: C Library: cstring: strncat
    SQL改写系列九:外连接转内连接的常见场景与错误
    Spring源码--Bean的加载
  • 原文地址:https://blog.csdn.net/qq_46381044/article/details/125317589