MySQL慢查询优化之索引优化(一)
2017-08-13 12:10
323 查看
示例:
从400万条员工表中对比索引查询和费索引的where查询
![](https://img-blog.csdn.net/20170813102629120?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmF2YU1vbw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
EXPLAIN结果显示MySQL预估需要访问7840条数据
在使用索引的情况下,多次执行此语句平均消耗时间约为0.02s
deptno上的索引对比一下
![](https://img-blog.csdn.net/20170813112332277?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmF2YU1vbw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
现在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优化器能够优化的方式来执行查询
从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查询优化一例---自动利用索引进行优化
- 提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)
- 提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)
- MySQL查询优化技术系列讲座之使用索引
- 干货:MySQL 索引原理及慢查询优化
- MySQL查询优化技术系列——索引
- mysql索引原理及慢查询优化
- mysql性能优化-慢查询分析、优化索引和配置
- MySQL索引原理及慢查询优化
- Mysql多列索引,查询优化
- 提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)
- MySQL 千万 级数据量根据(索引)优化 查询 速度
- MySQL索引原理及慢查询优化(转)
- mysql性能优化-慢查询分析、优化索引和配置
- MySQL索引原理及慢查询优化
- mysql千万级数据量根据索引优化查询速度
- 浅析MySQL中的Index Condition Pushdown (ICP 索引条件下推)和Multi-Range Read(MRR 索引多范围查找)查询优化
- Mysql优化,导致查询不走索引的原因总结
- MySQL 索引原理及慢查询优化
- mysql性能优化-慢查询分析、优化索引和配置