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进行数据过滤;
索引下推
。(五)索引匹配方式
- 全值匹配
- 匹配最左前缀
- 匹配列前缀
- 匹配范围值
- 精确匹配某一列并范围匹配另外一列
- 只访问索引的查询
推荐阅读
- Redis笔记|哨兵模式笔记
- MySQL笔记|MySQL笔记
- MySQL笔记|MySQL调优笔记
- MySQL笔记|MySQL 函数学习笔记
- c\c++基础|c++模板学习笔记
- Java学习|JDBC入门一 驱动下载和第一个简单的jdbc程序
- MySQL基础|Mysql运算符
- mysql中Mysql模糊查询like效率,以及更高效的写法和sql优化方法
- 框架类|内连接与这种写法有什么不同(很好的讨论)