这两个假设分别是:
1 一次单块读的成本与一次多块读的成本一样!
2 一次块访问就是一次物理磁盘读!
值得高兴的我们可以通过多个参数以一种相当切合实际的方式来修正这些假设.
Optimizer_index_cost_adj的值范围为1到10000,默认为100.实际上,这个参数描述的是,相对于一次多块读来讲,一次单块读有多么便宜.如果它的值为30,也就是高速Oracle一次单块读的成本是一次多块读的成本的30%. 从而Oracle就会因此这个参数的值很小而更多的倾向于选择使用索引访问.
Optimizer_index_caching的值访问为0到100,默认为0.这个参数告诉Oracle,假定索引块将在Buffer Cache中存在百分比.在这个例子中,将这个值设置为接近100的值将助长使用索引而不是表扫描.
我们可以将他们设置成”符合实际”的值. optimizer_index_caching设置成”buffer cache hit ratio”范围内的一个值---你需要自己决定具体是按照default pool,keep pool还是这两个的某种组合来得到这个数值.