Explain字段解释——possible_keys

本文深入解析MySQL的Explain输出中的possible_keys字段,探讨覆盖索引的概念及其优势。覆盖索引是指索引包含了查询所需的所有列,从而避免全表扫描,提高查询效率。通过减少数据访问量、优化IO操作和利用内存缓存,覆盖索引显著提升了查询性能,尤其在InnoDB存储引擎中。理解并有效利用覆盖索引,是数据库性能优化的关键步骤。
摘要由CSDN通过智能技术生成

本教程中所使用的数据库的建表语句都在“MySQL高阶教程索引”这篇文章中,点击链接直达:索引&建表语句

摘要:本文主要介绍Explain的常见字段——possible_keys

 

Explain字段解释——possible_keys

 

 

       

 

问:什么是覆盖索引?

如果一个索引包含(或覆盖)所有需要查询的字段的值,称为‘覆盖索引’。即只需扫描索引而无须回表。

问:什么叫一个索引包含了所要查询的所有列?

就是存在一个索引,它包含了select后面的字段,和where后面的字段。

比如一个查询语句中,select、where、group by、order by等后边跟着的字段共有A、B、C、D四种字段,那么一定要存在一个索引,它至少包含了A、B、C、D四个字段,mysql才能对其使用覆盖索引。

 

只扫描索引而无需回表的优点:

    1.索引条目通常远小于数据行大小,只需要读取索引,则mysql会极大地减少数据访问量。

    2.因为索引是按照列值顺序存储的,所以对于IO密集的范围查找会比随机从磁盘读取每一行数据的IO少很多。

    3.一些存储引擎如myisam在内存中只缓存索引,数据则依赖于操作系统来缓存,因此要访问数据需要一次系统调用

    4.innodb的聚簇索引,覆盖索引对innodb表特别有用。(innodb的二级索引在叶子节点中保存了行的主键值,所以如果二级主键能够覆盖查询,则可以避免对主键索引的二次查询)

 

覆盖索引必须要存储索引列的值,而哈希索引、空间索引和全文索引不存储索引列的值,所以mysql只能用B-tree索引做覆盖索引。

 

扩展:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

请保持优秀。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值