mysql索引笔记

2022-04-08  本文已影响0人  shoyu666

常见索引的类型

InnoDB B+树索引

innoDB的索引分2种

索引插入
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
上一篇下一篇

猜你喜欢

热点阅读