高性能MySql系列-查询性能优化

前言

查询优化、索引优化、库表结构优化需要齐头并进,一个不落。

最佳实践

是否在检索大量的数据行

大多数的慢查询都是因为检索了大量的数据行导致的。

每次看到select * 时都应该有怀疑审视的目光

1.不必要的列可能导致过多的IO/CPU/内存消耗。
2.无法使用覆盖索引提升性能。

不要重复执行相同的查询

例如用户头像URL,应当在首次查询后缓存起来。

检查3个指标

  • 响应时间
  • 扫描的行数
  • 返回的行数

响应时间 = 服务时间 + 排队时间。
服务时间是指数据库处理查询时真正花了多少时间,排队时间是指服务器因为等待某个资源而没能真正执行查询的时间,如等待IO完成,等待行锁等。
image.png
image.png

选择一个复杂查询还是多个简单查询

image.png
image.png
image.png

切分查询

删除旧数据就是一个很好的例子。
image.png
有时候,将多个join查询拆分成多次单表查询更有效。
image.png

理解查询背后的工作原理

image.png

image.png

image.png

image.png

文章来源: segmentfault.com,作者:小强大人,版权归原作者所有,如需转载,请联系作者。

原文链接:segmentfault.com/a/1190000039356979

(完)