全表扫描:
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)所以会产生下面这种现象,明显全表扫描更快,最终还是选择了索引扫描。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/21167890/viewspace-2711963/
,如需转载,请注明出处,否则将追究法律责任。