在Oracle 11g中缓存小的,或多或少的常量表

时间:2010-08-20 00:03:10

标签: oracle caching oracle11g

我们的应用程序中的许多查询涉及大(+经常更新)的表与小(+常量表)之间的连接。我的意思是> 100万行和小表我的意思是< 5000行。

我正在寻找在Oracle中使用某些功能/优化技术的方法(而不是在应用层),以便可以提高这些连接的效率。在阅读了这个问题之后,我发现了结果缓存和物化视图以适合我的场景。

我正在权衡这两种方法中的每一种:

  1. 结果缓存:因为大表是易变的,所以我不认为结果缓存是否可以帮助我使JOIN高效。但是如果我将小表放在结果缓存中会怎样呢?在执行JOIN时Oracle是否会以不会读取磁盘从小表中获取数据的方式帮助JOIN?

  2. 物化视图:我认为这会导致陈旧的数据问题,因为大型表经常更新

  3. 我想知道人们在类似场景中发现哪种方法很有用。

1 个答案:

答案 0 :(得分:2)

这取决于查询类型。

如果查询查看大表中的大量行(例如,数据仓库中典型的聚合),那么您可能会从物化视图中的“预聚合”旧/静态行中受益(这可能需要分区) 。在连接中,您可能正在查看位图索引/位图连接索引,具体取决于插入/更新的性质(尤其是并发)。

如果每个查询都查看大表的相同子集(例如“本周的订单”),那么将该子集聚集在磁盘的相同位上可能有助于内存缓存。

如果每个查询都查看大表的不同子集,那么缓存可能无济于事,但您需要确保索引正确。