MySQL 索引笔记
一、MySQL架构
二、存储引擎
MySQL存储引擎
B树
通常说的B-树就是B树,其实没有B-树
B+树
B树和B+树主要区别
B 树存储数据的时候,只有在叶子结点才存储数据;
B+ 树是在叶子结点和非叶子结点都存储数据。
二、索引实现原理
给一个字段建索引,B+树种存储的是这个值索引值,
先通过这个索引值从B+树中找到id,然后再次从B+树中找到该条数据。
索引的分类
三、索引优化——基础知识
(一)回表
首先在建立索引的某个字段的普通B+ 树中,根据索引 key 找到 id,
然后再根据 id 去主键 B+树 中找到对应的数据,这个过程就叫 回表。
(二)覆盖索引
例子:
select * from table1 where name = "zhangsan";
select id from table1 where name = "zhangsan";
- 第一条查询语句:会根据name,查找到对应的id,然后根据id去查找对应的数据,也就是会出现
回表
; - 第二条查询语句:第一次就根据name查找到了id,就不会在拿 id 去B+树中查找,就直接返回id了,这就是
索引覆盖
;
(三)最左匹配原则
思考:
给(name,age)创建了组合索引,下列哪些查询语句会用到组合索引?
select * from table1 where name = "zhangsan";
select id from table1 where name = "zhangsan" and age = 10;
select * from table1 where age = 10;
select id from table1 where age = 10 and name = "zhangsan";
这里就会涉及到MySQL执行的优化器,所以1,2,4条查询语句都会用到组合索引;
(四)索引下推
思考:
什么事谓词下推?
select t1.name,t2.name from t1 join t2 on t1.id = t2.id;
两种方式:
- 方式一: 把所有的字段先做表关联,然后再从关联好的表中选择需要的4个字段;
- 方式二: 先把两张表需要的4个字段取出,然后在做表关联;
当然第二种方式更好,把过滤处理的操作放到下层去处理,这就是谓词下推。
思考:
那什么是索引下推呢?
给(name,age)创建了组合索引:
方式一:
- 先根据name列从存储引擎中把符合规则的数据拉取到mysql的server层;
- 然后在server层按age进行数据过滤;
方式二:直接从存储引擎拉取数据的时候,直接按照name和age做判断,将符合的结果返回给mysqlserver;这就是 索引下推
。
(五)索引匹配方式
- 全值匹配
- 匹配最左前缀
- 匹配列前缀
- 匹配范围值
- 精确匹配某一列并范围匹配另外一列
- 只访问索引的查询
四、索引优化——覆盖索引
五、索引优化——索引监控
关注林哥,持续更新哦!!!★,°:.☆( ̄▽ ̄)/$:.°★ 。