覆盖索引是指索引的叶子节点已包含所有要查询的列,因此不需要访问表数据,能极大地提高性能。覆盖索引对InnoDB的聚簇索引表特别有用,因为可以避免InnoDB二级索引的二次查询。mysql里只有B树索引能做覆盖索引,因为必须要存储索引列的值,而哈希索引、空间索引、全文索引不可以。

当发起一个覆盖索引的查询时,在explain的Extra列可以看到Using Index,下面看一个例子,在表users有一个多列索引(login_id,status),执行计划如下

[sql] view plain copy print?
[email protected] 01:30:35>explain select login_id,status from users\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: users
type: index
possible_keys: NULL
key: login_id
key_len: 387
ref: NULL
rows: 5309293
Extra: Using index 对于innoDB来说,还有一个好处,就是二级索引包含主键值,所以二级索引还可以利用这个消息覆盖索引,如下所示:
[sql] view plain copy print?
[email protected] 01:34:17>explain select login_id,status,id from users\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: users
type: index
possible_keys: NULL
key: login_id
key_len: 387
ref: NULL
rows: 5309293
Extra: Using index

从上面我们可以知道,虽然二级索引的定义没有包含主键,但依然可以使用覆盖索引。


本文数据库(mysql)相关术语:navicat for mysql mysql workbench mysql数据库 mysql 存储过程 mysql安装图解 mysql教程 mysql 管理工具

主题: SQLMySQL数据InnoDB数据库
分页:12
转载请注明
本文标题:[MySQL]索引与性能(3)-覆盖索引 mysql mysql数据库 mysql索引 MySQL数据库性能
本站链接:http://www.codesec.net/view/522186.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 数据库(mysql) | 评论(0) | 阅读(61)