视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
mysql索引覆盖实例分析
2020-11-09 21:12:42 责编:小采
文档


本文实例讲述了mysql索引覆盖。分享给大家供大家参考,具体如下:

索引覆盖

如果查询的列恰好是索引的一部分,那么查询只需要在索引文件上进行,不需要回行到磁盘再找数据。这种查询速度非常快,称为“索引覆盖”。

假设有一张t15表,在表中建立了一个联合索引:cp(cat_id,price)

当我们使用下面的sql语句,会出现索引覆盖的情况。不信我们可以来查看一下,这里的Extra中显示了Using index,表示这条sql语句刚好用到了索引覆盖。

select price from t15 where cat_id = 1;

在来看一题,创建一张t11表,在email列有一个索引

假设我们用这样的查询语句:

select eamil from t11 where right(email,4)='.com'

查询分析:

首先看一下Extra,这里有Using index,说明这里使用到了索引覆盖,而possible_keys为NULL的原因是因为,使用到了mysql中的函数,所以在查询的时候并没有使用到email索引,但是key却为email,表示了使用到了索引进行排序,不信我把数据打印看看。

这里的数据是经过排序的。原本的数据是这样的。

索引覆盖的问题

create table A (
id varchar() primary key,
ver int,
…
)

表中有几个很长的字段varbinary(3000) ,在id、ver上有联合索引 ,共10000条数据

为什么select id from A order by id特别慢?
select id from A order by id,ver非常快

疑问: id, (id,ver)都有索引, select id 应该都产生”索引覆盖”的效果,为什么前者慢,而后快?

思路:innodb聚簇与myisam索引的不同 , 索引覆盖 这2个角度来考虑

(1)假设此表使用的是Myisam的索引,那么这两条sql语句都不需要回行查找数据,那么他们的速度应该差不多。

(2)假设此表使用的是InnoDB的索引,那么select id from A order by id这句sql使用到了主键索引,因为InnoDB的每个主键都挂载这每行的数据,并且本题中还有几个特别大的字段,所以会在查找id的时候需要走的相对慢;而select id from A order by id,ver这句sql使用到了id,ver联合索引,在InnoDB存储引擎中,次索引保存的是对主键索引的应用,所以次索引不挂载该行的数据,那么在(id,ver)索引中查找id会快,当找到对应的节点树时,只需要再次查找到主键索引的位置,即可拿到该行的数据,这样比较快。

推断:

(1)表如果是myisam引擎,2个语句,速度不会有明显差异.
(2)innodb表因为聚簇索引,id索引要在磁盘上跨N多块,导致速度慢.
(3)即使innodb引擎,如果没有那几个varbinay长列, 2个语句的速度也不会有明显差异.

t12表,存储引擎为MyISAM,有主键索引和(id,ver)符合索引,还有几个大的变长字段,测试推论1

t13表,存储引擎为InnoDB,有主键索引和(id,ver)符合索引,还有几个大的变长字段推论2

t14表,存储引擎为InnoDB,有主键索引和(id,ver)符合索引,没有几个大的变长字段推论3

t12,t13,t14每张表中都有1W条数据,然后进行测试,测试结果如下,我们的推论是正确的。

更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL索引操作技巧汇总》、《MySQL常用函数大汇总》、《MySQL日志操作技巧大全》、《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》及《MySQL数据库锁相关技巧汇总》

希望本文所述对大家MySQL数据库计有所帮助。

您可能感兴趣的文章:

  • mysql建立高效的索引实例分析
  • mysql重复索引与冗余索引实例分析
  • mysql索引对排序的影响实例分析
  • MySQL中NULL对索引的影响深入讲解
  • 详解MySQL索引原理以及优化
  • 通过唯一索引S锁与X锁来了解MySQL死锁套路
  • mysql 添加索引 mysql 如何创建索引
  • MySQL索引类型总结和使用技巧以及注意事项
  • MySQL查看、创建和删除索引的方法
  • MySQL 创建索引(Create Index)的方法和语法结构及例子
  • mysql聚簇索引的页原理实例分析
  • 下载本文
    显示全文
    专题