mysql查询性能优化之覆盖索引

1、概念介绍

1.1、官话

一个索引包含(或者说覆盖)所有需要查询的字段的值

1.2、白话

一条查询语句的所有字段都被一条辅助索引所包含,例如select c, d from A where a = 1 order by b, 若该A表有一个联合索引(a,b,c,d),则该辅助索引就是覆盖索引。mysql会自动利用辅助索引,若该条索引满足覆盖索引的前提。(tips:辅助索引上包含主键,所以select c, d, id from A where a = 1 order by b也能利用联合索引(a,b,c,d),假设id是主键)

1.3、原理

若一个查询的所有字段都可以在一条索引上找到,那么mysql将会直接利用该条索引(也就是覆盖索引)查找符合的数据,不会再需要到主键索引上去取数据了,也就是减少了一次回表查询的操作。简而言之,就是覆盖索引仅使用了表的部分列数据查找,而不是全部列,所以省了时间。

2、实战应用

2.1、案例一

select a from A where b = 1

建立联合索引(b, a)则可以使用覆盖索引

2.2、案例二

select * from A where b = 1 and c like '%张三%' limit 100000, 10

覆盖索引典型应用场景,分页查询中搭配延迟关联,在子查询中可以使用覆盖索引查询需要返回的主键,减少mysql需要获取的数据行。针对以上查询,建立联合索引(b, c),即使c字段模糊查询无法使用索引,但是该联合索引可以使用覆盖索引。修改后查询语句如下

select * from A join (select id from A where b = 1 and c like '%张三%' limit 100000, 10) t using (id)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值