2014-10-31 84 views
0

我有一個與查詢結構完全相同的View來在表中生成記錄。 但是,如果與Table進行比較,使用View執行select語句的時間需要較長的時間。在VIEW和TABLE之間檢索數據的性能比較

  1. 這是不是意味着如果與表比較,檢索數據需要更長的時間?
  2. 如果我有大量數據,那更適合使用Table而不是View?

SELECT COUNT(*)從XYZ_VIEW - 這是通過使用4min4sec返回記錄的圖,計數= 5896

SELECT COUNT(*)從XYZ --This是一個表,它返回返回記錄小於1秒,數= 5896

+0

檢查視圖的來源,它應該給你一個答案。 – 2014-10-31 07:49:06

回答

0

你沒有表現的觀點背後的查詢,但我認爲它涉及到一些加盟揭露標準化數據和/或其他處理。以下是您如何處理這方面的觀點。

視圖不應該(如在從不)成爲未過濾查詢的目標。事實上,這應該不鼓勵桌子,但在測試過程中它們有時是必需的。幸運的是,這些查詢在生產代碼中幾乎從來沒有合理或甚至是必要的。

由於您在測試過程中並不在乎性能,而是在生產過程中的性能,所以您沒有說任何暗示您可能有問題的事情。這是正確的,對於你顯示的查詢來說,四分鐘對一秒鐘是毫無意義的。我的許多觀點(如果不是大多數)會得出類似的結果。

而是使用更可能用於生產的查詢。使用毫秒精度的計時方法,使用更多的查詢形式:

select ... 
from table/view 
where <typical filtering criteria>; 

這會給你更多有用的信息。根據您的具體應用和要求,可接受的範圍將是10-20%。也就是說,如果表格在30毫秒內返回結果,那麼如果在小於大約36毫秒內返回相同的結果,則視圖是好的。

您正在使用視圖,可能是因爲它以某種方式操縱數據,以某種方式更有利地呈現數據。這個處理是你直接查詢表時不會有的開銷。當您省略過濾時,您可能無需在基礎表的每一行上執行該處理。當你做一些像select count(*)這樣特別愚蠢的事情時,你會執行所有額外的處理,不會帶來任何好處。

當您過濾查詢時,僅在限定結果集上執行額外處理。如果該結果集只有一行,則處理將僅在單行上執行,從視圖中呈現性能(當然取決於處理的確切數量和類型)實際上與表格無法區分。

我總是建議使用視圖 - 許多視圖 - 向用戶展示最適合其各種用途的數據。盡一切辦法測試這些意見。但使用有意義的測試。