MySQL 回表查询和索引覆盖


前言

InnoDB有两大类索引

  • 聚集索引(clustered index)
    • InnoDB 聚集索引 的叶子节点存储行记录,因此, InnoDB必须要有,且只有一个聚集索引
    • (1)如果表定义了PK,则PK就是聚集索引;
    • (2)如果表没有定义PK,则第一个not NULL unique列是聚集索引;
    • (3)否则,InnoDB会创建一个隐藏的row-id作为聚集索引;
    • PK查询非常快,直接定位行记录。
  • 普通索引(secondary index)
    • InnoDB 普通索引 的叶子节点存储主键值。
    • 注意,不是存储行记录头指针,MyISAM的索引叶子节点存储记录指针。

回表查询

(1)先通过普通索引定位到主键值id=5;
(2)在通过聚集索引定位到行记录;
这就是所谓的 回表查询 ,先定位主键值,再定位行记录,它的性能较扫一遍索引树更低。

索引覆盖


文章作者: zrh
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 zrh !
  目录