2010-08-20 79 views
1

或多或少是恆定的表很多我們的應用程序的查詢涉及大量(+經常更新)表之間的連接有小(+常數表)。大到我的意思是> 100萬行,小表我的意思是< 5000行。緩存小,在Oracle 11g中

我正在尋找利用Oracle中的一些功能/優化技術(而不是在應用層),使這些連接可以進行更有效的方式。在閱讀這個問題後,我發現了結果緩存和物化視圖以適應我的情況。

我權衡了利弊每個的這2種方法:

  1. 結果緩存:因爲大表是揮發性的,因此我不認爲如果結果緩存可以幫助我在製作中的聯接高效。但是如果將小表放入結果緩存中,會怎麼樣呢?它會以何種方式幫助JOIN,使Oracle在執行JOIN時不會讀取磁盤以從小表中讀取數據?

  2. 物化視圖:我覺得這可能再次導致陳舊的數據問題,因爲大表經常更新

我想知道哪種方法人在類似情況下有用的。

+1

小表將有希望在存儲器反正(而不是從磁盤讀取) – 2010-08-20 00:05:04

回答

2

這取決於排序的查詢。

如果查詢查看大表中的大量行(例如數據倉庫的典型聚集),那麼您可能從物化視圖中預先聚合較早/靜態的行中受益(這可能需要分區)。在連接中,您可能正在查看位圖索引/位圖連接索引,具體取決於插入/更新的性質(尤其是併發性)。

如果每個查詢着眼於大表(如「本週的訂單」)相同的子集,則聚類子集一起在磁盤上的同位可能與內存緩存幫助。

如果每個查詢着眼於大表的不同子集,然後緩存可能不會幫助,但你要確保你的指標是正確的。