MySQL 索引下推

索引下推

注意:如果学过关系代数语法树优化的,一看就懂。想学好数据库还是要回到课本

现在假设有张用户表

+-------------+---------+
| 列名         | 类型    |
+-------------+---------+
| id          | int     |
| age         | int     |
| FirstName   | varchar |
| LastName    | varchar |
+-------------+---------+

建立联合索引

create index idx_firstName_age on users(firstName,age)

现在查询 firstName 开头带有t的,并且年纪等于20岁的记录

select firstName,lastName,age from users where firstName like 't%' and age = 20

物理存储

现在插入五条数据

insert into users (id,fristName,lastName,age) values (001,'Tome','ajad',20);
insert into users (id,fristName,lastName,age) values (002,'Jack','ajad',18);
insert into users (id,fristName,lastName,age) values (003,'Tome','ajad',18);
insert into users (id,fristName,lastName,age) values (004,'Lee' ,'ajad',17);
insert into users (id,fristName,lastName,age) values (005,'Lee' ,'ajad',19);

结构简单描述如下
在这里插入图片描述

上面二级索引少画了主键的物理地址

语法分析树

所有的sql语句最后都会转换成关系代数去执行。语法树是从下往上开始执行的

使用apply 表示从索引回表的操作,这里我是为方便表示,事实上并没有这种表示方法

首先去联合索引(idx_firstName_age)去查找 firstName t开头的所有记录,然后回表返回 firstName lastName age 记录,再根据返回的记录找到 age = 20 的记录。

在这里插入图片描述

索引下推

index condition pushdown

很多不懂为啥叫索引下推?

首先是索引,其实就是选择条件下推,在《数据库系统概论 第五版》中,对于关系代数优化,尽可能得把选择和投影下移

从下图就知道了,选择条件下移,在联合索引里面判断,通过减少回表的次数,达到优化得目的

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Dig_hoof/article/details/123153347