美文网首页数据库
高级8、数据库索引之覆盖索引coveringindex

高级8、数据库索引之覆盖索引coveringindex

作者: 阿休 | 来源:发表于2018-05-18 19:26 被阅读3次

简介

覆盖索引是InnoDB中索引的特例,索引中包含查询的所有必填字段;换句话说,索引本身包含执行查询所需的数据,而不必执行额外的读取。

请注意,在InnoDB中,数据是使用主键索引存储的。换句话说,数据通过主键索引物理地存储为B +树。因此,主键被包括在所有二级索引的叶节点中以便建立从二级索引到实际数据行的引用。

因此,任何涉及二级索引的查找都必须从根节点通过分支节点导航到正确的叶节点以获取主键值,然后对主键索引执行随机IO读取(再次从根节点通过分支节点到正确的叶节点)来获取数据行。

使用覆盖索引,我们避免了在主键索引(一个B +树较少遍历,避免昂贵的IO操作)上的这种额外的随机IO读取以获取数据行,因为查询所需的所有字段都包括在覆盖索引中。

什么时候使用覆盖索引

避免大表额外的IO读取。有时甚至可以避免额外的物理随机IO读取(最昂贵的IO操作)。

我们可以使用这个特定的索引进行查询,需要:

过滤符合一定条件的行(WHERE子句)

分组数据(GROUP BY子句)

按覆盖索引(ORDER BY子句)的顺序排序数据

投影数据(SELECT子句)

实例测试

创建测试表

CREATE TABLE big_table(

  id int primary key auto_increment,

  field01 int,

  field02 int,

  field03 varchar(50)

) engine=innodb;

文章来源:https://m.aliyun.com/yunqi/articles/412937

相关文章

  • 高级8、数据库索引之覆盖索引coveringindex

    简介 覆盖索引是InnoDB中索引的特例,索引中包含查询的所有必填字段;换句话说,索引本身包含执行查询所需的数据,...

  • mysql高级知识

    mysql高级知识系列目录 存储过程与函数 理解MySQL数据库覆盖索引 为什么 MySQL 索引要使用 B+树而...

  • oracle数据库之索引书目录

    oracle数据库之索引 oracle数据库之创建一个索引(Creating an Index Explicitl...

  • MongoDB覆盖索引查询 和 高级索引

    覆盖索引 官方的MongoDB的文档中说明,覆盖查询是以下的查询: 所有的查询字段是索引的一部分 所有的查询返回字...

  • [数据库之十二] 数据库索引之覆盖索引

    1、MySQL 中的聚簇索引   对于 MySQL InnoDB 引擎来说,表必须要有聚簇索引(也叫聚集索引),设...

  • MySQL索引

    MySQL索引 索引介绍 索引原理与分析 组合索引 索引失效分析 索引介绍 什么是索引索引:包括聚集索引、覆盖索引...

  • 辅助索引种类细分

    单列的辅助索引 联合多列辅助索引(覆盖索引) 唯一索引

  • index pushdown

    表结构 索引覆盖 索引下推

  • 2019-11-13

    分区: 在数据量超大的时候,B-tree 索引就无法起作用了。除非索引是覆盖查询,否则数据库服务器需要根据索引扫描...

  • 2019-11-12

    分区: 在数据量超大的时候,B-tree 索引就无法起作用了。除非索引是覆盖查询,否则数据库服务器需要根据索引扫描...

网友评论

    本文标题:高级8、数据库索引之覆盖索引coveringindex

    本文链接:https://www.haomeiwen.com/subject/zflndftx.html