MySQL 索引笔记

MySQL 索引笔记

一、MySQL架构

MySQL 索引笔记_第1张图片

二、存储引擎

MySQL存储引擎

MySQL 索引笔记_第2张图片

B树

通常说的B-树就是B树,其实没有B-树
MySQL 索引笔记_第3张图片

B+树

MySQL 索引笔记_第4张图片

MySQL 索引笔记_第5张图片

B树和B+树主要区别

B 树存储数据的时候,只有在叶子结点才存储数据;
B+ 树是在叶子结点和非叶子结点都存储数据。

二、索引实现原理

给一个字段建索引,B+树种存储的是这个值索引值,
先通过这个索引值从B+树中找到id,然后再次从B+树中找到该条数据。

索引的分类

MySQL 索引笔记_第6张图片

三、索引优化——基础知识

(一)回表

首先在建立索引的某个字段的普通B+ 树中,根据索引 key 找到 id,
然后再根据 id 去主键 B+树 中找到对应的数据,这个过程就叫 回表。

(二)覆盖索引

例子:

select * from table1 where name = "zhangsan";
select id from table1 where name = "zhangsan";
  1. 第一条查询语句:会根据name,查找到对应的id,然后根据id去查找对应的数据,也就是会出现回表;
  2. 第二条查询语句:第一次就根据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;

两种方式:

  1. 方式一: 把所有的字段先做表关联,然后再从关联好的表中选择需要的4个字段;
  2. 方式二: 先把两张表需要的4个字段取出,然后在做表关联;

当然第二种方式更好,把过滤处理的操作放到下层去处理,这就是谓词下推。

思考:那什么是索引下推呢?

给(name,age)创建了组合索引:
方式一:

  1. 先根据name列从存储引擎中把符合规则的数据拉取到mysql的server层;
  2. 然后在server层按age进行数据过滤;

方式二:直接从存储引擎拉取数据的时候,直接按照name和age做判断,将符合的结果返回给mysqlserver;这就是 索引下推

(五)索引匹配方式

  1. 全值匹配
  2. 匹配最左前缀
  3. 匹配列前缀
  4. 匹配范围值
  5. 精确匹配某一列并范围匹配另外一列
  6. 只访问索引的查询

四、索引优化——覆盖索引

五、索引优化——索引监控

关注林哥,持续更新哦!!!★,°:.☆( ̄▽ ̄)/$:.°★ 。

你可能感兴趣的:(MySQL笔记,mysql,数据库,database)