什么是覆盖索引

2023-12-26 23:39:37


程序员的公众号:源1024,获取更多资料,无加密无套路!

最近整理了一份大厂面试资料《史上最全大厂面试题》,Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等
获取方式: 关注公众号并回复 666 领取,更多内容持续奉上


先了解一下什么是聚集索引和辅助索引

  • 聚集索引(主键索引)

聚集索引就是按照每张表的主键构造一棵B+树,同时叶子节点中存放的为整张表的数据,聚集索引的叶子节点称为数据页。

  • 辅助索引(二级索引)

非主键索引,叶子节点存放的是键值和书签。Innodb存储引擎的书签就是相应行数据的主键索引值。

什么是覆盖索引呢?

查询的数据列只需要从索引中就能够获取到,而不必从数据表中读取,也就是查询列被所使用的索引包含在内,即索引包含了查询查找的所有数据。如果一个索引包含了满足查询语句中字段与条件的数据,那么就叫覆盖索引。

优点

  • ?索引项通常比记录要小,所以MySQL访问更少的数据。

  • ?相对于随机访问记录,需要更少的I/O。

  • ?覆盖索引对InnoDB尤其有用,因为InnoDB使用聚集索引组织数据,如果二级索引包含查询所需的数据,就不再需要在聚集索引中查找了。

?限制

  • ?覆盖索引也并不适用于任意的索引类型,索引必须存储列的值。

  • ?Hash、full-text索引不存储值,因此MySQL只能使用B树。

  • ?不同的存储引擎实现覆盖索引都是不同的,并不是所有的存储引擎都支持覆盖索引。

  • ?如果要使用覆盖索引,一定要注意SELECT需要的列,不可以SELECT * ,因为如果将所有字段一起做索引会导致索引文件过大,查询性能下降。


?系列文章索引

MyBatis的插件能在哪些地方进行拦截?

了解MyBatis的缓存机制吗

面试官:谈谈对volatile的理解

Spring中用到了哪些设计模式

面试官:说一下SQL的执行过程

线程池的工作原理


?

文章来源:https://blog.csdn.net/feikillyou/article/details/135232792
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。