覆盖索引
覆盖索引
覆盖索引是指在数据库中创建的一种特殊索引,它包含了查询语句中所需的所有字段
覆盖索引是select的数据列只用从索引中就能够取得,不必读取数据行,换句话说查询列要被所建的索引覆盖。
理解方式一:索引是高效找到行的一个方法,但是一般数据库也能使用索引找到一个列的数据,因此它不必读取整个行。毕竟索引叶子节点存储了它们索引的数据;当能通过读取索引就可以得到想要的数据,那就不需要读取行了。一个索引包含了(或覆盖了)满足查询结果的数据就叫做覆盖索引。
那我们如何知道,SQL有没有使用到覆盖索引呢,在MySql中,我们可以使用explain查询SQL的执行计划,如果使用了覆盖索引,在Extra字段会输出Using index,这就表示当前sql使用了覆盖索引
如何实现索引覆盖?
最常见的方法就是:将被查询的字段,建立到联合索引(如果只有一个字段,普通索引也可以)里去。
如以下这句sql,我在name字段建立了一个索引
EXPLAIN SELECT id,name FROM student
看它的执行计划,为Using index
这是因为索引叶子节点存储了主键id,而name也是索引,所以查询为覆盖索引。
当我们添加一个不是索引的字段时,那么就无法从索引树上查询,必须回表查询出这个字段
EXPLAIN SELECT id,name,age FROM student
结果如下
注意:覆盖索引必须要存储索引列的值,而哈希索引、空间索引和全文索引不存储索引列的值,所以mysql只能用B-tree索引做覆盖索引。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)