查询优化

优化数据访问

不要请求多余的数据

  • 只查询需要的记录
  • 只查询需要的列
  • 不要重复查询相同数据

不要使MySQL扫描额外的记录

对于MySQL,最简单的衡量查询开销有三个指标
1. 响应时间
2. 扫描的行数
3. 返回的行数

响应时间

响应时间包括服务器时间和排队时间。服务器时间是指数据库处理这个查询真正花了多长时间。排队时间是指服务器因为等待某些资源而没有真正执行查询的时间。

一般最常见和重要的等待是I/O和锁等待,但实际情况更复杂

扫描的行数和返回的行数

理想情况下扫描的行数和返回的行数应该是相同的

扫描的行数的访问类型

访问类型从慢到快依次是 全表扫描、范围扫描、唯一索引查询、常数引用等。
一般MySQL能够使用下面三种方式应用WHERE条件,从好到坏依次为:
- 在索引中使用WHERE条件过滤不匹配记录。这是存储引擎层完成的
- 使用索引覆盖扫描来返回记录,直接从索引中过滤不需要的记录并返回命中结果。这是在MySQL服务器层完成的,但不雪再回表查询记录。
- 从数据表中返回数据,然后过滤不满足条件的记录。这在MySQL服务器层完成,MySQL需要先从数据表读出记录然后过滤。

重构查询

切分查询

  • 分散服务器压力
  • 减少锁的持有时间
  • 减少MySQL复制的延迟

分解关联查询

  • 让缓存的效率更高
  • 分解后,执行单个查询可以减少锁的竞争
  • 在应用层做关联,可以更容易对数据库进行拆分,更容易做到高性能和可扩展
  • 查询本身效率也可能会有提升
  • 可以减少冗余记录的查询
  • 避免了MySQL的潜逃循环关联

查询执行的基础


执行路径

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值