|
|
原帖由 棉花糖ONE 于 2008-9-11 10:44 发表 ![]()
还不知道是keep住表起作用还是order by rowid起作用了,keep住表当然能减少一些物理读啊
测一次至少需要1个多小时的CURSOR打开时间,而我们的测试组白天黑夜地一直占着测试环境。有机会一定按相同的条件测一下。
不过我觉得KEEP在这个例子里的作用应该不大。表数据只有被访问,才会读到内存里,并不是把表设为KEEP池,就都读进来驻留在内存了--也没那么大的地方把表数据全部装进来。从这一点上来说,DEFAULT池和KEEP池的作用是相同的。ORACLE之所以要设置KEEP池,是提供一种手段,让DBA有机会把不同行为的表分开,使之互不干扰。拿本例来说,设成KEEP是想在生产上执行时,免得其他程序把刚读进来并且还没有处理完的数据块挤出去。但是在当时的测试环境上的负载很低,所以在测试时KEEP应该没起什么作用。这个观点需要实际验证。你也可以构造一个测试环境验证你的想法。
对于方案一(不用order by rowid),反正rowid是乱序的,每次基本上也都是从磁盘读,既然data buffer不起作用,那么用哪个data buffer都一样。 |
|