Mysql-覆盖索引

概念

如果索引包含所有满足查询需要的数据的索引成为覆盖索引(Covering Index),即不需要回表操作

判断sql是否使用了覆盖索引

我们可以通过expalin来判断查询是否覆盖索引,主要看extra字段是否有 using index 。

覆盖索引的优势

使用覆盖索引的点在于其不用回表操作,不需要回表操作有哪些优势呢?

  1. 索引条目通常远小于数据行大小,只需要读取索引,则mysql会极大地减少数据访问量。
  2. 因为索引是按照列值顺序存储的,所以对于IO密集的范围查找会比随机从磁盘读取每一行数据的IO少很多。
  3. 一些存储引擎如myisam在内存中只缓存索引,数据则依赖于操作系统来缓存,因此要访问数据需要一次系统调用
  4. innodb的聚簇索引,覆盖索引对innodb表特别有用。(innodb的二级索引在叶子节点中保存了行的主键值,所以如果二级主键能够覆盖查询,则可以避免对主键索引的二次查询)

覆盖索引必须要存储索引列的值,而哈希索引、空间索引和全文索引不存储索引列的值,所以mysql只能用B-tree索引做覆盖索引

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值