资讯专栏INFORMATION COLUMN

mysql高效索引之覆盖索引

zhjx922 / 2114人阅读

摘要:聚集索引,辅助索引,联合索引,覆盖索引聚集索引一个表中只能有一个,聚集索引的顺序与数据真实的物理存储顺序一致。联合索引就是由多列组成的的索引。覆盖索引指从辅助索引中就能获取到需要的记录,而不需要查找聚簇索引中的记录。

什么叫做覆盖索引?

解释一: 就是select的数据列只用从索引中就能够取得,不必从数据表中读取,换句话说查询列要被所使用的索引覆盖。

解释二: 索引是高效找到行的一个方法,当能通过检索索引就可以读取想要的数据,那就不需要再到数据表中读取行了。如果一个索引包含了(或覆盖了)满足查询语句中字段与条件的数据就叫做覆盖索引。

解释三:是非聚集组合索引的一种形式,它包括在查询里的Select、Join和Where子句用到的所有列(即建立索引的字段正好是覆盖查询语句[select子句]与查询条件[Where子句]中所涉及的字段,也即,索引包含了查询正在查找的所有数据)。
 不是所有类型的索引都可以成为覆盖索引。覆盖索引必须要存储索引的列,而哈希索引、空间索引和全文索引等都不存储索引列的值,所以MySQL只能使用B-Tree索引做覆盖索引
当发起一个被索引覆盖的查询(也叫作索引覆盖查询)时,在EXPLAIN的Extra列可以看到“Using index”的信息。

注:遇到以下情况,执行计划不会选择覆盖查询。

select选择的字段中含有不在 索引 中的字段 ,即索引没有覆盖全部的列。

where条件中不能含有对索引进行like的操作。

mysql聚集索引,辅助索引,联合索引,覆盖索引

聚集索引:
一个表中只能有一个,聚集索引的顺序与数据真实的物理存储顺序一致。查询速度贼快,聚集索引的叶子节点上是该行的所有数据 ,数据索引能加快范围查询(聚集索引的顺序和数据存放的逻辑顺序一致)。主键!=聚集索引。

辅助索引(非聚集索引):
一个表中可以有多个,叶子节点存放的不是一整行数据,而是键值,叶子节点的索引行中还包含了一个"书签",这个书签就是指向聚簇索引的一个指针,从而在聚簇索引树中找到一整行数据。

联合索引:
就是由多列组成的的索引。遵循最左前缀规则。对where,order by,group by 都生效。

覆盖索引:
指从辅助索引中就能获取到需要的记录,而不需要查找聚簇索引中的记录。使用覆盖索引的一个好处是因为辅助索引不包括一条记录的整行信息,所以数据量较聚集索引要少,可以减少大量io操作。

聚集索引与辅助索引的区别:
叶子节点是否存放的为一整行数据

最左前缀规则:
假设联合索引由列(a,b,c)组成,则一下顺序满足最左前缀规则:a、ab、abc;selece、where、order by 、group by都可以匹配最左前缀。其它情况都不满足最左前缀规则就不会用到联合索引。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/49096.html

相关文章

  • Mysql 架构及优化-索引优化

    摘要:索引基础知识索引帮助高效获取数据的数据结构索引中叫键数据越大越重要索引好比一本书为了找到书中特定的话题查看目录获得页码索引列位于列索引按值查找并且返回任何包含该值的行如果索引了多列数据那么列的顺序非常重要存储引擎说明存储引擎表锁表级锁不支持 索引基础知识 索引帮助mysql高效获取数据的数据结构 索引(mysql中叫键(key)) 数据越大越重要索引好比一本书,为了找到书中特定的话...

    binta 评论0 收藏0
  • MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化

    摘要:数据实体之间的逻辑关系,解决数据冗余和数据维护异常。判断标准使用,可以通过输出的列来判断,对于一个索引覆盖查询,显示为查询优化器在执行查询前会决定是否有索引覆盖查询。 上一篇:MySQL性能管理及架构设计(一):什么影响了数据库查询速度、什么影响了MySQL性能 一、数据库结构优化(非常重要) 1.1 数据库结构优化目的     1、减少数据冗余:(数据冗余是指在数据库中存在相同的数据...

    evin2016 评论0 收藏0
  • MySQL学习笔记索引

    摘要:哈希索引哈希索引基于哈希索引实现,只有精确匹配所有所有列的查询才有效。哈希索引只支持等值比较查询。如果哈希冲突很多的话,一些索引维护代价也会很高。因为这些限制哈希索引只适用于某些特定的场合。建立聚簇索引的方式对主键建立聚簇索引。 索引是存储引擎用于快速找到记录的一种数据结构。 索引对于良好的性能非常关键。尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要。在数据量较小且负载较低时...

    fou7 评论0 收藏0
  • 深入MySQL索引

    摘要:索引作为数据库优化的常用手段之一在项目优化中经常会被用到但是如何建立高效索引有效的使用索引以及索引优化的背后到底是什么原理这次我们深入数据库索引从索引的数据结构开始说起索引原理索引为什么能提高查询效率当我们有一个索引之后写一个查询语句索引是 MySQL索引作为数据库优化的常用手段之一在项目优化中经常会被用到, 但是如何建立高效索引,有效的使用索引以及索引优化的背后到底是什么原理?这次我...

    Alex 评论0 收藏0
  • MYSQL

    摘要:每开始一个新的事务,系统版本号都会自动递增。事务开始时刻的系统版本号会作为事务的版本号,用来查询到的每行版本号进行比较。为删除的每一行保存当前系统版本号作为行删除标识。当出现哈希冲突时,存储引擎必须遍历链表中的所有行指针。 多版本并发控制 mysql的大多数事务型存储引擎实现的都不是简单的行级锁。基于提升并发性能的考虑,它们一般都同时实现了多版本并发控制。 可以认为MVCC是行级锁的一...

    BigNerdCoding 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<