查询性能优化
查询性能优化
优化数据访问
1、是否在查询中包含了大量的不需要的行
2、服务器是否在分析大量的不需要的行。
针对第一点我们要规避的一些操作:
- 查询了100行 只显示10行。
- 多表连接时返回全部列。
- 使用select * from …。
- 重复查询相同的数据。
针对第二点如何确保MySQL是否在扫描一些额外的记录,我们可以通过三个指标进行衡量:响应时间、扫描行数、返回的行数。这是哪个指标们记录到MySQL的慢查询日志中。
MySQL 执行计划的知识补充
我们主要查看两个字段的含义:
type:代表我们的查询使用了哪种类型的查询分别有:
system > const > eq_ref > ref > range > index > all。 此值一般要超过range,最好是达到ref是比较合格的一个查询。
Extra: 解析查询的额外信息
Using index:使用索引覆盖扫描(在Extra列中出现了Using index)来返回记录,直接从索引中过滤不需要的记录并返回命中的结果。这是在MySQL服务器层完成的,但无须再回表查询记录。
Using where:从数据表中返回数据,然后过滤不满足条件的记录。这在MySQL服务器层完成,MySQL需要先从数据表中读出记录然后过滤。
发现查询需要扫描大量的数据但只返回少数行,可以尝试下面的技巧去优化它:
- 使用索引覆盖扫描,把所有需要用的列都放到索引中,这样存储引擎无须回表获取对应行就可以返回结果了。
- 改变库表结构。例如,使用单独的汇总表(这是我们在第6章中讨论的办法)。
- 重写这个复杂的查询,让MySQL优化器能够以更优化的方式执行这个查询
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 编程纪元!
评论
ValineGitalk