您的位置:首页 > 数据库 > MySQL

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

2017-08-13 12:10 323 查看
示例:

从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优化器能够优化的方式来执行查询
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: