Buffer Hit %:数据块在数据缓冲区中的命中率,通常应在 95%以上。否则,小于 95%,一个高的命中率,不一定代表这个系统的性能是最优的,比如大量的非选择性的索引被频繁访问,就会造成命中率很高的假相(大量的 db file 
sequential read),但是一个比较低的命中率,一般就会对这个系统的性能产生影响,需要调整。我对上面说到的虚高并不理解,请牛人详解下:另外,网上查到有这么一说:单纯的缓存命中率高并不代表缓存的性能很好,在RBO下,不正确的建立索引可能导致性能低下而缓存命中率却相当高,比如在一个经常使用表的低集势栏位上建二叉树索引就可能出现这种情形,系统不停而低效地扫描索引,导致出现虚高的缓存命中率。我想请问,RBO不已经早被淘汰了吗那现在是不是不用考虑是否虚高了?

解决方案 »

  1.   

    比如说性别列,只有两个值,男和女。假设员工表包含这一列而且在这一列上建立了二叉索引的话,访问该列时索引中的男和女这两个值就会被缓存在buffer中,而频繁的对其进行访问,可以在buffer中找到相应内容,必然就会造成buffer hit的虚高呀。虽然RBO是逐渐在被CBO所取代,不过也不能说在这种情况下就完全不考虑虚高这个问题。可以通过查看语句执行的一些信息,来判断是否该使用该索引。
      

  2.   

    受教楼上了。现在用的都是基于CBO 了。 
      

  3.   


    这个索引在CBO下会使用么?
      

  4.   

    90% 不使用 还不如全表扫描呢110% 使用 索引SIZE 小于表的SIZE  而且查询列就男女   select sum(case when sex=boy then 1 else 0 end),sum(case when sex=gril then 1 else 0 end )  from student.走索引全扫描