mysql cost计算

来源:这里教程网 时间:2026-03-01 15:20:27 作者:
全表扫描:
IO成本=页面数*1+1.1
CPU成本=总行数*0.2
总成本=P+R/5+1.1
range扫描(索引覆盖扫描)(总cost最低)
IO成本=索引页面数*1
CPU成本=扫描行*0.2
总成本=P+r/5
range扫描:
IO成本=扫描的行记录数*1
CPU成本=扫描的行记录数*0.2
总成本=r+r/5
当(r+r/5)>(P+R/5),即r/R>1/6+5/6*P/R时,会选择全表扫描(单个页面存放的行越多, 越容易选择全表扫描;行比较短的表一般都在0.166-0.2,示例里的表3列,每个页面存放209条行数据,得到的值是0.17)
ref扫描:
IO成本=扫描的行记录数*1(最高值为P*1*3或R/10)
CPU成本=扫描的行记录数*0.2
总成本=r+r/5
修正:range优化打不同的是,这里做了一个修正(range优化并没有做),也是IO COST最坏不会超过全表扫描IO消耗的3倍(或者总记录数除以10)。
当(3*P+r/5)>(P+R/5),即r/R>1-10*P/R时,会选择全表扫描(单个页面存放的行越多, 越不容易选择全表扫描;行比较短的表一般都在0.9以上,示例里的表3列,每个页面存放209条行数据,得到的值是0.95)所以会产生下面这种现象,明显全表扫描更快,最终还是选择了索引扫描。

相关推荐