`
Iuranus
  • 浏览: 39019 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

覆盖索引

阅读更多

   最近学习数据库设计时涉及到的一些知识,这些材料大部分是从网络搜集,并加上了自己的一些理解整理而成。“覆盖索引”一词没有被百度百科收录,因此也将该词条添加至百度百科。

 

什么是覆盖索引:

  覆盖索引一说为索引覆盖。
  理解方式一: 就是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之高效覆盖索引

    ### MySQL之高效覆盖索引 #### 一、什么是覆盖索引? 覆盖索引(Covering Index)是数据库索引的一种优化技术,在MySQL等关系型数据库管理系统中被广泛应用。覆盖索引的特点在于它能够使得数据库系统在执行查询时...

    覆盖索引及案例

    ### 覆盖索引及案例 #### 一、覆盖索引的概念与作用 覆盖索引(Covering Index)是一种特殊类型的索引,其目的是为了提高数据库查询的效率。通过在索引中存储除了主键之外的数据列,使得查询可以直接从索引中获取...

    MogoDB数据库索引与覆盖索引查询

    本文将详细介绍MongoDB中的索引和覆盖索引查询的概念,及其相关的实际应用场景。 首先,索引是数据库中用于提高查询效率的重要结构。与关系型数据库类似,MongoDB中的索引可以帮助快速定位数据,特别是在有大量数据...

    MongoDB覆盖索引查询.pdf

    MongoDB 覆盖索引查询是一种优化查询性能的技术,尤其适用于需要高效检索和返回大量数据的场景。在MongoDB中,覆盖索引查询是指查询涉及的所有字段都包含在创建的索引中,这样MongoDB就无需回表(即不需访问原始文档...

    覆盖索引案例:覆盖索引.md

    覆盖索引.md

    行业-77回表查询对性能的损害以及覆盖索引是什么?.rar

    在数据库管理领域,回表查询和覆盖索引是两个关键概念,它们直接影响着数据库的查询效率和整体性能。本文将详细解析这两个概念,并探讨它们如何影响数据库系统的性能。 首先,让我们了解一下什么是“回表查询”。在...

    一篇文章讲清楚MySQL的聚簇-联合-覆盖索引、回表、索引下推.doc

    MySQL 聚簇索引、联合索引、覆盖索引、回表、索引下推 一篇文章讲清楚 MySQL 的聚簇、联合、覆盖索引、回表、索引下推 MySQL 的索引机制是数据库性能优化的关键,了解索引的类型和使用场景可以大大提高数据库的...

    77回表查询对性能的损害以及覆盖索引是什么?.pdf

    但是,索引的使用同样伴随着一定的性能成本,尤其是在涉及到所谓的“回表查询”和“覆盖索引”时。 首先,我们来探讨什么是回表查询。在数据库中,每张表默认会有一个聚簇索引,也就是主键索引。聚簇索引的叶子节点...

    Mysql覆盖索引详解

    MySQL覆盖索引是一种优化策略,它允许查询仅通过索引本身获取所需的所有数据,而无需回表查询实际的数据行。这种技术可以显著提高查询速度,因为它减少了数据访问量,特别是对于那些只涉及到索引列的查询。覆盖索引...

    MySQL 的覆盖索引与回表的使用方法

    在MySQL数据库中,索引是提高查询效率的重要手段,其中覆盖索引和回表是两个关键概念,尤其对于InnoDB存储引擎的表来说,理解它们有助于优化查询性能。 首先,我们来看两大类索引:聚簇索引和普通索引。聚簇索引,...

    MongoDB 覆盖索引查询

    MongoDB的覆盖索引查询是一种优化查询性能的技术,它的核心在于通过索引来满足查询的全部需求,从而避免了对整个文档的访问。这种查询方法在处理大数据量时尤其有用,因为它减少了磁盘I/O操作,提高了查询速度。下面...

    【MySQL】查询优化与覆盖索引

    在了解覆盖索引之前我们先大概了解一下什么是聚集索引(主键索引)和辅助索引(二级索引) 聚集索引(主键索引): 聚集索引就是按照每张表的主键构造一颗B+树,同时叶子节点中存放的即为整张表的记录数据。 聚集索引的...

    mysql中关于覆盖索引的知识点总结

    【覆盖索引】是数据库优化中的一个重要概念,特别是在MySQL中,它可以显著提升查询效率。覆盖索引是指一个索引包含了查询所需的所有数据,使得数据库在执行查询时无需回表到原始数据行获取信息。这种机制减少了I/O...

    Mysql性能优化案例研究-覆盖索引和SQL_NO_CACHE

    在本案例中,我们关注的是如何利用覆盖索引和SQL_NO_CACHE选项来提高查询效率。 首先,让我们来看一下原始的问题。有一个图片表`pics`,包含了大约100万条记录,字段包括`user_id`、`picname`和`smallimg`。针对`...

    Mysql性能优化案例 - 覆盖索引分享

    覆盖索引是一种优化策略,它允许MySQL查询仅使用索引本身来获取所有需要的数据,避免了对数据行的额外访问,从而显著减少I/O操作,提高查询速度。 在描述的场景中,有一个包含大约100万条记录的图片表`pics`,主要...

    利用索引提高SQLServer数据处理效率

    在SQL Server数据库中,索引是提升数据处理效率的...合理使用聚簇索引、非聚簇索引和覆盖索引,结合对查询模式的深入理解和系统负载的实时监控,可以显著提高SQL Server的数据处理效率,从而提升整个应用系统的性能。

Global site tag (gtag.js) - Google Analytics