Mysql索引优化

覆盖索引优化

涉及概念:回表查询,聚集索引,普通索引

InnoDB:

  1. 有两大索引,聚集索引和普通索引;聚集索引存储行数据,普通索引存储主键值
  2. 回表查询,以普通索引查询行的全部数据,必须走两张索引表,先到普通索引获取主键,再到聚集索引获取行数据。
  3. 覆盖索引,需要查询的数据在索引信息里面已经全部包含,不需要再回表。

举例
create table user (
id int primary key,
name varchar(20),
sex varchar(5),
index(name)
)engine=innodb;

表user的普通索引name,
查询1,只要name信息,不用回表,因为nane已经在索引中
select name from user where name='xxx';
查询2,sex信息需要从行记录里获取,需要回表
select name,sex from user where name ='xxx';

查询2的覆盖索引优化,对标user建立索引index(name, sex)

总结:覆盖索引,就是建立必要的联合索引,查询信息限定在联合索引中,多余的不要查

参考资料
mysql覆盖索引与回表

你可能感兴趣的:(mysql索引innodb)