最近学习数据库设计时涉及到的一些知识,这些材料大部分是从网络搜集,并加上了自己的一些理解整理而成。“覆盖索引”一词没有被百度百科收录,因此也将该词条添加至百度百科。
什么是覆盖索引:
覆盖索引一说为索引覆盖。
理解方式一:
就是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,查询效率嗷嗷的。【引】
分享到:
相关推荐
### MySQL之高效覆盖索引 #### 一、什么是覆盖索引? 覆盖索引(Covering Index)是数据库索引的一种优化技术,在MySQL等关系型数据库管理系统中被广泛应用。覆盖索引的特点在于它能够使得数据库系统在执行查询时...
### 覆盖索引及案例 #### 一、覆盖索引的概念与作用 覆盖索引(Covering Index)是一种特殊类型的索引,其目的是为了提高数据库查询的效率。通过在索引中存储除了主键之外的数据列,使得查询可以直接从索引中获取...
本文将详细介绍MongoDB中的索引和覆盖索引查询的概念,及其相关的实际应用场景。 首先,索引是数据库中用于提高查询效率的重要结构。与关系型数据库类似,MongoDB中的索引可以帮助快速定位数据,特别是在有大量数据...
MongoDB 覆盖索引查询是一种优化查询性能的技术,尤其适用于需要高效检索和返回大量数据的场景。在MongoDB中,覆盖索引查询是指查询涉及的所有字段都包含在创建的索引中,这样MongoDB就无需回表(即不需访问原始文档...
覆盖索引.md
在数据库管理领域,回表查询和覆盖索引是两个关键概念,它们直接影响着数据库的查询效率和整体性能。本文将详细解析这两个概念,并探讨它们如何影响数据库系统的性能。 首先,让我们了解一下什么是“回表查询”。在...
MySQL 聚簇索引、联合索引、覆盖索引、回表、索引下推 一篇文章讲清楚 MySQL 的聚簇、联合、覆盖索引、回表、索引下推 MySQL 的索引机制是数据库性能优化的关键,了解索引的类型和使用场景可以大大提高数据库的...
但是,索引的使用同样伴随着一定的性能成本,尤其是在涉及到所谓的“回表查询”和“覆盖索引”时。 首先,我们来探讨什么是回表查询。在数据库中,每张表默认会有一个聚簇索引,也就是主键索引。聚簇索引的叶子节点...
MySQL覆盖索引是一种优化策略,它允许查询仅通过索引本身获取所需的所有数据,而无需回表查询实际的数据行。这种技术可以显著提高查询速度,因为它减少了数据访问量,特别是对于那些只涉及到索引列的查询。覆盖索引...
在MySQL数据库中,索引是提高查询效率的重要手段,其中覆盖索引和回表是两个关键概念,尤其对于InnoDB存储引擎的表来说,理解它们有助于优化查询性能。 首先,我们来看两大类索引:聚簇索引和普通索引。聚簇索引,...
MongoDB的覆盖索引查询是一种优化查询性能的技术,它的核心在于通过索引来满足查询的全部需求,从而避免了对整个文档的访问。这种查询方法在处理大数据量时尤其有用,因为它减少了磁盘I/O操作,提高了查询速度。下面...
在了解覆盖索引之前我们先大概了解一下什么是聚集索引(主键索引)和辅助索引(二级索引) 聚集索引(主键索引): 聚集索引就是按照每张表的主键构造一颗B+树,同时叶子节点中存放的即为整张表的记录数据。 聚集索引的...
【覆盖索引】是数据库优化中的一个重要概念,特别是在MySQL中,它可以显著提升查询效率。覆盖索引是指一个索引包含了查询所需的所有数据,使得数据库在执行查询时无需回表到原始数据行获取信息。这种机制减少了I/O...
在本案例中,我们关注的是如何利用覆盖索引和SQL_NO_CACHE选项来提高查询效率。 首先,让我们来看一下原始的问题。有一个图片表`pics`,包含了大约100万条记录,字段包括`user_id`、`picname`和`smallimg`。针对`...
覆盖索引是一种优化策略,它允许MySQL查询仅使用索引本身来获取所有需要的数据,避免了对数据行的额外访问,从而显著减少I/O操作,提高查询速度。 在描述的场景中,有一个包含大约100万条记录的图片表`pics`,主要...
在SQL Server数据库中,索引是提升数据处理效率的...合理使用聚簇索引、非聚簇索引和覆盖索引,结合对查询模式的深入理解和系统负载的实时监控,可以显著提高SQL Server的数据处理效率,从而提升整个应用系统的性能。