程序员的公众号:源1024,获取更多资料,无加密无套路!
最近整理了一份大厂面试资料《史上最全大厂面试题》,Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等
获取方式: 关注公众号并回复 666 领取,更多内容持续奉上
先了解一下什么是聚集索引和辅助索引
聚集索引(主键索引)
聚集索引就是按照每张表的主键构造一棵B+树,同时叶子节点中存放的为整张表的数据,聚集索引的叶子节点称为数据页。
辅助索引(二级索引)
非主键索引,叶子节点存放的是键值和书签。Innodb存储引擎的书签就是相应行数据的主键索引值。
什么是覆盖索引呢?
查询的数据列只需要从索引中就能够获取到,而不必从数据表中读取,也就是查询列被所使用的索引包含在内,即索引包含了查询查找的所有数据。如果一个索引包含了满足查询语句中字段与条件的数据,那么就叫覆盖索引。
优点
?索引项通常比记录要小,所以MySQL访问更少的数据。
?相对于随机访问记录,需要更少的I/O。
?覆盖索引对InnoDB尤其有用,因为InnoDB使用聚集索引组织数据,如果二级索引包含查询所需的数据,就不再需要在聚集索引中查找了。
?限制
?覆盖索引也并不适用于任意的索引类型,索引必须存储列的值。
?Hash、full-text索引不存储值,因此MySQL只能使用B树。
?不同的存储引擎实现覆盖索引都是不同的,并不是所有的存储引擎都支持覆盖索引。
?如果要使用覆盖索引,一定要注意SELECT需要的列,不可以SELECT * ,因为如果将所有字段一起做索引会导致索引文件过大,查询性能下降。
?