MySQL慢查询优化之索引优化(一)

示例:
从400万条员工表中对比索引查询和费索引的where查询

有索引查询:
EXPLAIN select * from emp WHERE deptno=28;

这里写图片描述

EXPLAIN结果显示MySQL预估需要访问7840条数据
在使用索引的情况下,多次执行此语句平均消耗时间约为0.02s

deptno上的索引对比一下

ALTER TABLE emp drop INDEX index_deptno;
EXPLAIN select * from emp WHERE deptno=28;

这里写图片描述
现在MySQL使用了全表扫描(ALL),using where 显示MySQL通过where条件扫描4000000条数据来返回结果,在没有使用索引的情况下,多次执行此查询消耗了0.7s左右

可以发现使用索引的效率是不使用索引效率的35倍

三种方式应用where条件语句性能从好到坏依次为
1.在索引中使用,在存储引擎层完成
2.索引覆盖扫描(Extra:using index),即从索引中过滤不需要的记录返回结果,在MySQL服务层完成
3.从数据表中过滤返回结果(Extra:using where),在mysql服务层完成

如果发现某个查询需要扫描大量的数据,但是只返回了少数的行,那么通常可以尝试下面的技巧来优化
1.使用覆盖索引扫描,把所有需要用的列都放到索引中,这样存储引擎不用回表就能返回结果
2.改变库表结构,比如通过冗余数据减少联结的运算
3.重写查询,是MySQL优化器能够优化的方式来执行查询

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值