回表查询、索引覆盖

187 阅读1分钟

回表查询

mysql innodb索引分为两类:聚集索引和普通索引

(1)如果表定义了primaryKey,则primaryKey就是聚集索引;

(2)如果表没有定义primaryKey,则第一个not null uk列是聚集索引;

(3)否则,InnoDB会创建一个隐藏的row-id作为聚集索引。

B+树索引的叶子节点存储数据,那这两类索引的叶子节点具体是存储了啥子玩意呢?

聚集索引:  存的是数据行,通过聚集索引我们可以在这个索引树上得到所要的数据行;

普通索引:  存的是聚集索引的值;

聚集索引的效率非常高;

普通索引查到聚集索引的值后 需要  再查询聚集索引,也就是需要扫两次索引树。

索引覆盖

查询执行计划 explain xx ;  有个extra 字段    using index

1.单列索引 和聚集索引(主键)建联合索引,避免回表;