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优化器能够优化的方式来执行查询

你可能感兴趣的:(mysql)