美文网首页
MySQL 覆盖索引

MySQL 覆盖索引

作者: 杰哥长得帅 | 来源:发表于2018-05-05 21:14 被阅读13次

通常大家会根据查询的 where 条件来创建合适的索引,不过这只是索引优化的一个方面。设计优秀的索引应该考虑到整个查询,而不单单是 where 条件部分。索引确实是一种查找数据的高效方式,但是 MySQL 也可以使用索引来直接获取列的数据,这样就不再需要读取数据行。如果索引的叶子节点中已经包含要查询的数据,那么还有必要再回表查询吗?如果一个索引包含所有需要查询的字段的值,就称之为 ”覆盖索引”

覆盖索引是非常有用的工具,能够极大的提高性能(减少 IO 操作)。因为,只需要读取索引,而无需读表,极大减少数据访问量

查看方法

explain sql 语句:
extra(use index)有这个说明是覆盖索引

如果索引覆盖了 WHERE 条件中的字段,但不是整个查询涉及的字段
explain sql 语句会得到 extra(use where)

如果没有任何索引能覆盖查询的所有列,那么这个查询就需要回表(就是根据 where 条件重新查询一次数据,然后返回结果)。但是索引还是用到了

使用条件

覆盖索引必须要存储索引列的值,而哈希索引、空间索引和全文索引等都不存储索引列的值,所以 MySQL 只能使用 B-Tree 索引做覆盖索引。并且不同的存储引擎实现覆盖索引都是不同的。并不是所有的存储引擎都支持它们。如果要使用覆盖索引。一定要注意 SELECT 列表值取出需要的列。不可以是 SELECT * ,因为如果将所有字段一起做索引会导致索引文件过大。查询性能下降。不能为了利用覆盖索引而这么做

优点

MySQL 只需要通过索引就可以返回查询所需要的数据,而不必在查到索引之后进行回表操作,减少 IO,提高了效率

相关文章

  • 高性能的索引策略

    MySQL查询基础-查询执行过程 MySQL聚簇索引 MySQL覆盖索引 MySQL索引扫描排序 MySQL冗余和...

  • Mysql 相关

    MySQL索引 MySQL索引背后的数据结构及算法原理 覆盖索引和回表操作 MySQL性能优化 MySql表分区详...

  • MySQL覆盖索引

    MySQL覆盖索引 1.定义: 一个索引包含(或者覆盖)所有需要查询的字段

  • mysql覆盖索引

    见:https://my.oschina.net/loujinhe/blog/1528233

  • MYSQL覆盖索引

    如果一个索引包含(或覆盖)所有需要查询的字段的值,称为‘覆盖索引’。即只需扫描索引而无须回表。只扫描索引而无需回表...

  • MySQL 覆盖索引

    通常大家会根据查询的 where 条件来创建合适的索引,不过这只是索引优化的一个方面。设计优秀的索引应该考虑到整个...

  • MySQL覆盖索引

    一、覆盖索引覆盖索引(covering index)指一个查询语句的执行只用从索引中就能够取得,不必从数据表中读取...

  • MYSQL - 覆盖索引

    什么叫做覆盖索引? 解释一: 就是select的数据列只用从索引中就能够取得,不必从数据表中读取,换句话说查询列要...

  • mysql 覆盖索引

    一.前言 select * 和select 字段,经常遇到说不要用select *,因为效率慢,不能走索引什么什么...

  • MySQL覆盖索引

    覆盖索引 1、当发起一个被索引覆盖的查询时,在explain的extra列可以看到using index的信息,此...

网友评论

      本文标题:MySQL 覆盖索引

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