(转)深入研究B树索引(五)续
5.3重建B树索引对于查询性能的影响
重建之前的成本:1个根+1个分支+1个叶子+1个表块=4个逻辑读
重建之后的成本:1个根+1个分支+1个叶子+1个表块=4个逻辑读
性能提高百分比:0
最差的clustering_factor(即该值等于表的数据行数):
重建之前的成本:1个根+1个分支+0.0001*10000(1个叶子)+100个表块=103个逻辑读
重建之后的成本:1个根+1个分支+0.0001*5000(1个叶子)+100个表块=102.5个逻辑读
性能提高百分比:0.5%(也就是减少了0.5个逻辑读)
最好clustering_factor(即该值等于表的数据块):
重建之前的成本:1个根+1个分支+0.0001*10000(1个叶子)+0.0001*100000(10个表块)=13个逻辑读
重建之后的成本:1个根+1个分支+0.0001*5000(1个叶子)+0.0001*100000(10个表块)=12.5个逻辑读
性能提高百分比:3.8%(也就是减少了0.5个逻辑读)
最差的clustering_factor(即该值等于表的数据行数):
重建之前的成本:1个根+1个分支+0.01*10000(100个叶子)+10000个表块=10102个逻辑读
重建之后的成本:1个根+1个分支+0.01*5000(50个叶子)+10000个表块=10052个逻辑读
性能提高百分比:0.5%(也就是减少了50个逻辑读)
最好clustering_factor(即该值等于表的数据块):
重建之前的成本:1个根+1个分支+0.01*10000(100个叶子)+0.01*100000(1000个表块)=1102个逻辑读
重建之后的成本:1个根+1个分支+0.01*5000(50个叶子)+0.01*100000(1000个表块)=1052个逻辑读
性能提高百分比:4.5%(也就是减少了50个逻辑读)
最差的clustering_factor(即该值等于表的数据行数):
重建之前的成本:1个根+1个分支+0.1*10000(1000个叶子)+100000个表块=101002个逻辑读
重建之后的成本:1个根+1个分支+0.1*5000(500个叶子)+100000个表块=100502个逻辑读
性能提高百分比:0.5%(也就是减少了500个逻辑读)
最好clustering_factor(即该值等于表的数据块):
重建之前的成本:1个根+1个分支+0.1*10000(1000个叶子)+0.1*100000(10000个表块)=11002个逻辑读
重建之后的成本:1个根+1个分支+0.1*5000(500个叶子)+0.1*100000(10000个表块)=10502个逻辑读
性能提高百分比:4.5%(也就是减少了500个逻辑读)
重建之前的成本:(1个根+40个分支+10000个叶子)/ 8=1256个逻辑读
重建之后的成本:(1个根+40个分支+5000个叶子)/ 8=631个逻辑读
性能提高百分比:49.8%(也就是减少了625个逻辑读)
下表显示了不同的索引下,运行测试语句所需的时间对比情况。
记录数
占记录总数的百分比
pctused(50%)
pctused(90%)
性能提高百分比
1条记录
0.0001%
0.01
0.01
0.00%
100条记录
0.0100%
0.01
0.01
0.00%
1000条记录
0.1000%
0.01
0.01
0.00%
10000条记录
1.0000%
0.02
0.02
0.00%
50000条记录
5.0000%
0.06
0.06
0.00%
100000条记录
10.0000%
1.01
1.00
0.99%
1000000条记录
100.0000%
13.05
11.01
15.63%
1000000条记录(FFS)
100.0000%
7.05
7.02
0.43%