2010-01-28 23 views
0

如果創建數千個視圖,是否會妨礙數據庫性能。我的意思是在oracle中創建數千個視圖有任何問題。請解釋,因爲我在這方面是新的......我正在使用oracle ...在數據庫中創建視圖和性能。,

+0

有沒有可能您的數千個視圖基本上是相同的視圖,但對於不同的用戶? – 2010-01-28 11:49:35

回答

0

視圖與創建它的選擇一樣重,但Oracle負載均衡和單選不能損害數據庫。如果您有數千個併發選擇,那麼您可能會遇到問題。意見的數量並不重要,但它們的重要程度以及使用量有多大。

你實際上需要展示視圖代碼並告訴你實際上想要做什麼。

0

Oracle視圖是 複雜查詢的封裝,必須與 保持一致使用。以下是 記住的關鍵事實:

視圖並非旨在提高SQL 的性能。當你需要 封裝SQL時,你應該把它放在存儲過程中的 而不是 使用一個視圖。視圖隱藏了底層查詢的複雜性 ,使得 對於無經驗的程序員 和最終用戶制定查詢更加容易。 視圖可用於調整 提示的查詢,前提是視圖始終在正確的上下文中使用 。

source: Guard against performance issues when using Oracle hints and views

+1

-1不同意 - 視圖不適合每種情況,並且可能有問題,但用存儲過程替換它們會更糟糕。至少有鑑於此,Oracle有機會對其進行優化。 – 2010-01-29 02:32:37

2

的這些觀點的簡單的存在應該不影響性能的。但是,一旦開始使用這些觀點,可能會對性能產生負面影響。 Oracle試圖「記住」它所看到的每條語句的計劃,但它通過比較源代碼(SQL)來比較語句。您的數千個視圖都將命名爲不同的名稱,因爲您不能使用同一名稱的多個視圖,因此每次使用其中一個視圖時,Oracle將不得不完全解析SQL,即使它是基本爲

SELECT * FROM VIEW_1; 

SELECT * FROM VIEW_2; 

所有這些重新解析肯定會需要一些時間。

這些視圖各有什麼不同?我認爲退一步考慮其他可能性可能是一個好主意。我想問的問題包括:

  1. 這裏要做什麼?
  2. 爲什麼需要數千種不同的視圖?
  3. 有沒有其他方法可以完成需要完成的任務,而無需創建所有這些視圖?

我不知道1和2的答案,但我相當肯定第3個答案是「是」。

祝你好運。

+0

是的。需要確定爲什麼需要這麼多視圖 - 在某些情況下,如果唯一發生變化的是(例如)WHERE子句中的某些謂詞,則可能會將視圖與會話上下文變量組合在一起。 – 2010-01-29 02:34:44

0

如果優化器足夠聰明,視圖不應該影響性能。我記得Views在影響性能時與其他數據庫引擎有關。正如在許多表演案例中 - 我建議衡量你的具體案例。