最近学习数据库设计时涉及到的一些知识,这些材料大部分是从网络搜集,并加上了自己的一些理解整理而成。“覆盖索引”一词没有被百度百科收录,因此也将该词条添加至百度百科。
什么是覆盖索引:
覆盖索引一说为索引覆盖。
理解方式一:
就是select的数据列只用从索引中就能够取得,不必读取数据行,换句话说查询列要被所建的索引覆盖。
理解方式二:
索引是高效找到行的一个方法,但是一般数据库也能使用索引找到一个列的数据,因此它不必读取整个行。毕竟索引叶子节点存储了它们索引的数据;当能通过读取索引就可以得到想要的数据,那就不需要读取行了。一个索引包含了(或覆盖了)满足查询结果的数据就叫做覆盖索引。【引】
理解方式三:
是非聚集复合索引的一种形式,它包括在查询里的Select、Join和Where子句用到的所有列(即建索引的字段正好是覆盖查询条件中所涉及的字段,也即,索引包含了查询正在查找的数据)。【引】
覆盖索引的使用:
如果你想要通过索引覆盖select多列,那么需要给需要的列建立一个多列索引,当然如果带查询条件,where条件要求满足最左前缀原则
。(Innodb的辅助索引叶子节点包含的是主键列,所以主键一定是被索引覆盖的。)
(1)例如,在sakila的inventory表中,有一个组合索引(store_id,film_id),对于只需要访问这两列的查 询,MySQL就可以使用索引,如下:
mysql> EXPLAIN SELECT store_id, film_id FROM sakila.inventory\G
(2)再比如说在文章系统里分页显示的时候,一般的查询是这样的:
SELECT id, title, content FROM article ORDER BY created DESC LIMIT 10000, 10;
通常这样的查询会把索引建在created字段(其中id是主键),不过当LIMIT偏移很大时,查询效率仍然很低,改变一下查询:
SELECT id, title, content FROM article
INNER JOIN (
SELECT id FROM article ORDER BY created DESC LIMIT 10000, 10
) AS page USING(id)
此时,建立复合索引"created, id"(只要建立created索引就可以吧,Innodb是会在辅助索引里面存储主键值的),就可以在子查询里利用上Covering Index,快速定位id,查询效率嗷嗷的。【引】
分享到:
相关推荐
覆盖索引 技巧 1. 创建覆盖索引的方法 2. 使用Order by和distinct后,如何创建覆盖索引
MySQL之高效覆盖索引
文档介绍了MogoDB数据库索引与覆盖索引查询, MongoDB 引用有两种:手动引用(Manual References)和 DBRefs。
如果索引包含所有满足查询需要的数据的索引成为覆盖索引(Covering Index),也就是平时所说的不需要回表操作 判断标准 使用explain,可以通过输出的extra列来判断,对于一个索引覆盖查询,显示为using index,MySQL...
MongoDB 覆盖索引查询 官方的MongoDB的文档中说明,覆盖查询是以下的查询: 所有的查询字段是索引的一部分 所有的查询返回字段在同一个索引中 由于所有出现在查询中的字段是索引的一部分, MongoDB 无需在整个数据...
MongoDB覆盖索引查询.pdf 学习资料 复习资料 教学资源
如果一个索引包含(或覆盖)所有需要查询的字段的值,称为‘覆盖索引‘。 覆盖索引是一种非常强大的工具,能大大提高查询性能,只需要读取索引而不需要读取数据,有以下优点: 1、索引项通常比记录要小,所以MySQL访问...
在了解覆盖索引之前我们先大概了解一下什么是聚集索引(主键索引)和辅助索引(二级索引) 聚集索引(主键索引): 聚集索引就是按照每张表的主键构造一颗B+树,同时叶子节点中存放的即为整张表的记录数据。 聚集索引的...
一篇文章讲清楚MySQL的聚簇-联合-覆盖索引、回表、索引下推.doc
77回表查询对性能的损害以及覆盖索引是什么?.pdf
主要介绍了MySQL 的覆盖索引与回表的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
行业-77回表查询对性能的损害以及覆盖索引是什么?.rar
一个用户会有多条图片记录,现在有一个根据user_id建立的索引:uid,查询语句也很简单:取得某用户的图片集合: 代码如下: select picname, smallimg from pics where user_id = xxx; 优化前 执行查询语句(为了...
主要介绍了Mysql性能优化案例 - 覆盖索引分享,需要的朋友可以参考下
前言 之前在网上看到过很多关于mysql联合索引最左前缀匹配的文章,自以为就了解了其原理,最近面试时和面试官交流,发现遗漏...覆盖索引:假如查询SELECT col1, col2, col3 FROM 表名,由于查询的字段存在索引页中,那
此外,还可以考虑使用覆盖索引,即索引包含了查询所需的所有列,避免了回表操作。 索引失效可能是由于多种原因造成的。其中一个常见的原因是使用了函数或者表达式对索引列进行操作,例如使用了字符串函数或者使用了...