美文网首页
mysql索引笔记

mysql索引笔记

作者: shoyu666 | 来源:发表于2022-04-08 22:38 被阅读0次

    常见索引的类型

    • hash索引
      适用于等值查询的场景
    • 有序数组
      适用于等值查询和范围查询
    • 搜索数

    InnoDB B+树索引

    innoDB的索引分2种

    • 聚簇索引(也叫主键索引)
    • 二级索引(也叫非主键索引)


      image.png

      图中左边是聚簇索引,右边是二级索引,两者最大的区别就是叶子节点的内容不一样,聚簇索引的内容是整行数据,二级索引的内容是行的主键。

    索引插入
    image.png

    插入700时,加到R5后面。


    image.png

    插入400时,R4,R5移动空出位置。如果R5所在的数据页已满的情况下,会申请新的页,然后将部分数据挪到新页,这个过程叫页分裂。

    索引的等值查找

    select * from T where ID=500 该语句是主键查找方式,直接搜索聚簇索引,即图中左边的索引,直接得到R4.
    select * from T where k=5 该语句走的是右边的二级索引,查询到的是500这个主键,所以需要再用500去左侧主键索引搜索,查询到R4这个数据,也就是说二级索引搜索要扫描2次,一次是二级索引,另外一次是主键索引,这个过程叫回表。

    索引的范围查找

    select * from T where k between 3 and 5


    image.png

    第一步:使用3扫描二级索引取得ID=300,拿着300扫描主键索引得到R3。
    第二部: 取下一个值k=5 取得ID=500,拿着500扫描主键索引得到R4。
    第三步: 取下一个值 K=6,不满足 between 3 and 5 的条件,循环结束。

    覆盖索引

    select ID from T where k between 3 and 5
    该语句只查ID,因为二级索引的叶子节已经是ID,所有不需要回表,可以理解为索引已经覆盖了结果范围。

    最左前缀原则
    image.png

    如图的索引,当查张三时,可以快速定位到ID4,然后遍历所需的结果。
    where name like ‘张%’ 也能用上索引。
    最左前缀可以是联合索引的最左N个字段,也可以是字符串索引的最左M个字符。

    索引下推

    select * from tuser where name like '张%' and age=10 and ismale=1;
    在MySQL 5.6之前,只能从ID3开始一个个回表。到主键索引上找出数据行,再对比字段值
    MySQL 5.6 引入的索引下推优化(index condition pushdown), 可以在索引遍历过程中,对索
    引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数。


    image.png

    相关文章

      网友评论

          本文标题:mysql索引笔记

          本文链接:https://www.haomeiwen.com/subject/paxusrtx.html