mysql查询优化器的错误执行和优化处理类型

​ 一条查询有很多种执行方式,最后都返回相同的结果.优化器的作用就是找到这其中最好的执行计划.

​ MySQL使用基于成本的优化器,它尝试预测一个查询使用某种执行计划时的成本,并选择其中最小的一个.

​ 通过查询当前会话的Last_query_cost 的值来得知MySQL计算的当前查询成本

show status like 'Last_query_cost';

一.导致优化器选择错误的执行计划的原因

1.统计信息不准确

​ MySQL 依赖存储引擎提供的统计信息来评估成本,但是有的存储引擎提供的信息是准确的,有的偏差可能非常大

2.执行计划中的成功估算不等同于实际执行的成本

​ 即使统计信息精准,优化器给出的执行计划也可能不是最优的;有时候某个执行计划虽然需要读取更多的页面,但它的成本却更小(比如这些页面都是顺序读或者这些页面再内存中)

3.MySQL是基于成本模型选择最优的计划

​ 我们可能希望执行的时间尽可能的短,MySQL 是选择基于成本模型选择最优的计划,但是MySQL选择的这些并不是最快的执行方式

4.MySQL不考虑其他的并发执行的查询

​ 并发执行的计划会影响到当前查询的速度

5.MySQL 不是任何时候都是基于成本的优化

​ 有时候基于规则优化,如果存在全本搜索的MATCH()子句,则存在全文索引的时候就使用全文索引,即使使用where和别的索引快,mysql 也会继续使用对应的全文索引

6.MySQL 不会考虑其不受控制的操作的成本

​ 例

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值