加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_镇江站长网 (https://www.0511zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL索引与性能(3) 覆盖索引 - MySQL教程

发布时间:2014-05-15 20:26:53 所属栏目:MySql教程 来源:站长网
导读:覆盖索引是指索引的叶子节点已包含所有要查询的列,因此不需要访问表数据,能极大地提高性能。覆盖索引对 InnoDB的聚簇索引表特别有用,因为可以避免InnoDB二级
覆盖索引是指索引的叶子节点已包含所有要查询的列,因此不需要访问表数据,能极大地提高性能。覆盖索引对 InnoDB的聚簇索引表特别有用,因为可以避免InnoDB二级索引的二次查询。MySQL里只有B树索引能做覆盖索引,因为必 须要存储索引列的值,而哈希索引、空间索引、全文索引不可以。

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

root@test 01:30:35>explain select login_id,status from usersG  
*************************** 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来说,还有一个好处,就是二级索引包含主键值,所以二级索引还可以利用这个消息覆盖索引,如下所示 :

root@test 01:34:17>explain select login_id,status,id from usersG  
*************************** 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

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

查看本栏目更多精彩内容:http://www.bianceng.cn/database/MySQL/

(编辑:应用网_镇江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!