5.数据库索引

回表:回到主键索引树搜索的过程。

如何优化索引避免回表过程?

1. 覆盖索引:

mysql> create table T (

ID int primary key,

k int NOT NULL DEFAULT 0,

s varchar(16) NOT NULL DEFAULT '',

index k(k))

engine=InnoDB;

insert into T values(100,1, 'aa'),(200,2,'bb'),(300,3,'cc'),(500,5,'ee'),(600,6,'ff'),(700,7,'gg');

查询语句select * from T where k between 3 and 5,因为需要查询所有字段信息,所以需要回表查询。但是查询语句

select ID from T where k between 3 and 5,只需要查询ID的值,而k索引树上已经包含了主键ID的值,因此可以直接提供查询结果,不需要回表,这种情况叫做“覆盖索引”。

覆盖索引可以减少树的搜索次数,显著提升查询性能,所以使用覆盖索引是一个常用的性能优化手段。

2. 最左前缀原则:

B+树这种索引结构,可以利用索引的“最左前缀”来定位记录。

5.数据库索引_第1张图片
(name, age)索引示意图


3. 索引下推

Mysql5.6引入了索引下推优化(index condition pushdown),可以在索引遍历过程中,对索引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数。

5.数据库索引_第2张图片
索引下推执行过程

在满足语句需求的情况下, 尽量少地访问资源是数据库设计的重要原则之一,在使用数据库的时候,尤其是在设计表结构时,也要以减少资源消耗作为目的。

你可能感兴趣的:(5.数据库索引)