mysql基于成本的优化

mysql在实际执行查询语句之前会经查询优化器评估一个成本最低的方式去执行查询,成本是怎么评估的呢?分为两个部分:

  • IO成本:mysql规定读取一个页面的成本是1.0
  • CPU成本:CPU成本是指对记录进行条件判断的成本,mysql规定判断一条记录的成本为0.2

从上可以看出,我们需要两个数据:

  • 核算IO成本需要页面数量
  • 核算CPU成本需要记录数

总成本=IO成本+CPU成本

通常选择最低成本的方式执行查询包括下述步骤:

  • 计算全表扫描成本
  • 计算使用各种索引的成本
  • 选择成本低的去执行查询语句

针对全表扫描的成本核算比较简单,我们需要的两部分数据可以直接通过查看表的统计信息得出:show table status like ‘%xxx%’,列出的信息中包括记录条数,不过针对innodb引擎而言不太准确。页面数量可以计算出来,可以使用data_length即记录占用的总字节数除以一个页面的大小得出总页数。不过计算成本的时候会加入一些微调值,这些都不需要关注。

如果查询条件中有二级索引列,优先计算唯一二级索引,计算每种二级索引的成本,可能会遇到二级索引+回表的形式。诸如索引的成本计算比较复杂,不深入。

完。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值