缓存小,在Oracle 11g中
问题描述:
或多或少是恒定的表很多我们的应用程序的查询涉及大量(+经常更新)表之间的连接有小(+常数表)。大到我的意思是> 100万行,小表我的意思是< 5000行。缓存小,在Oracle 11g中
我正在寻找利用Oracle中的一些功能/优化技术(而不是在应用层),使这些连接可以进行更有效的方式。在阅读这个问题后,我发现了结果缓存和物化视图以适应我的情况。
我权衡了利弊每个的这2种方法:
结果缓存:因为大表是挥发性的,因此我不认为如果结果缓存可以帮助我在制作中的联接高效。但是如果将小表放入结果缓存中,会怎么样呢?它会以何种方式帮助JOIN,使Oracle在执行JOIN时不会读取磁盘以从小表中读取数据?
物化视图:我觉得这可能再次导致陈旧的数据问题,因为大表经常更新
我想知道哪种方法人在类似情况下有用的。
答
这取决于排序的查询。
如果查询查看大表中的大量行(例如数据仓库的典型聚集),那么您可能从物化视图中预先聚合较早/静态的行中受益(这可能需要分区)。在连接中,您可能正在查看位图索引/位图连接索引,具体取决于插入/更新的性质(尤其是并发性)。
如果每个查询着眼于大表(如“本周的订单”)相同的子集,则聚类子集一起在磁盘上的同位可能与内存缓存帮助。
如果每个查询着眼于大表的不同子集,然后缓存可能不会帮助,但你要确保你的指标是正确的。
小表将有希望在存储器反正(而不是从磁盘读取) – 2010-08-20 00:05:04