说到回表查询,我们得现说说Mysql 的 InnoDB引擎的索引结构即 B+树
B+ 树 索引主要分为两个:聚簇索引 和 非聚簇索引
-
聚簇索引:也就是平常我们说的主键索引,在 B+ 树中叶子节点存的是整行数据。
-
非聚簇索引:非聚集索引即索引结构和数据分开存放的索引。
我们如果使用主键查找,那么使用的是聚簇索引,能直接获取到数据,而如果我们使用非聚簇索引查找,如果该索引不包含我们需要查找的的全部字段,那么就需要根据叶子节点存储的主键值在进行一次查找来找到我们需要的数据,这就是回表查询。
很明显,回表查询需要二次查询,那么效率肯定就会低,那么为了解决这个问题,我们可以使用覆盖索引
如果一个索引包含(或者说覆盖)所有需要查询的字段的值,我们就称之为“覆盖索引”。
如主键索引,如果一条 SQL 需要查询主键,那么正好根据主键索引就可以查到主键。
再如普通索引,如果一条 SQL 需要查询 name,name 字段正好有索引, 那么直接根据这个索引就可以查到数据,也无需回表。
觉得不错的小伙伴可以一键三连哦!,感谢支持!!!
更多面试题请移步 大厂面试题专栏