关于innodb主键索引的问题

来源:2-13 MySQL常用存储引擎之Innodb

烈焰卡卡

2020-03-27

想问一下,有一张表a,任何索引都没有,只有主键和其他字段。
当我查询select * from a时,这时候explain查看自然是走了ALL的全表查询。
当我查询select id from a时,这时候explain查看却是走了主键索引而不是全表查询。
我理解主键索引作为B+树的结构,非叶子节点只存储了一个范围,比如id5以下的指向一个数据页,id10以下的指向另一个数据页,即便我查询的只有id列,也不应该存在所谓覆盖索引的情况,也应该查询所有数据页才能获取到每一条数据的id。

请问一下老师,是我理解上哪里出问题了么,为什么实际情况当只查询id列的时候,不需要走全表搜索,只在非叶子节点就能完成这个查询呢?

写回答

1回答

sqlercn

2020-03-28

因为只查id的话可以通过主键索引获得,所以只用主键扫描就可以了,你可以看看innodb的存储结构
0
13
sqlercn
回复
烈焰卡卡
前面已经说过了,执行计划是由MySQL服务层生成的,其并不知道数据层是什么存储结构,所以也一知道你用到的索引是一是需要进行二次查找获得数据。所以只能跟据索引的统计信息知道,一个查询是否是可以通过索引获得,如果一个查询中所需要的所有信息全包知在一个索引中,就会显示使用覆盖索引。
2020-03-29
共13条回复

MySQL提升课程 全面讲解MySQL架构设计

面面俱到讲解影响MySQL性能的各个因素,让MySQL架构了然于胸。

4419 学习 · 547 问题

查看课程