你沒有表現的觀點背後的查詢,但我認爲它涉及到一些加盟揭露標準化數據和/或其他處理。以下是您如何處理這方面的觀點。
視圖不應該(如在從不)成爲未過濾查詢的目標。事實上,這應該不鼓勵桌子,但在測試過程中它們有時是必需的。幸運的是,這些查詢在生產代碼中幾乎從來沒有合理或甚至是必要的。
由於您在測試過程中並不在乎性能,而是在生產過程中的性能,所以您沒有說任何暗示您可能有問題的事情。這是正確的,對於你顯示的查詢來說,四分鐘對一秒鐘是毫無意義的。我的許多觀點(如果不是大多數)會得出類似的結果。
而是使用更可能用於生產的查詢。使用毫秒精度的計時方法,使用更多的查詢形式:
select ...
from table/view
where <typical filtering criteria>;
這會給你更多有用的信息。根據您的具體應用和要求,可接受的範圍將是10-20%。也就是說,如果表格在30毫秒內返回結果,那麼如果在小於大約36毫秒內返回相同的結果,則視圖是好的。
您正在使用視圖,可能是因爲它以某種方式操縱數據,以某種方式更有利地呈現數據。這個處理是你直接查詢表時不會有的開銷。當您省略過濾時,您可能無需在基礎表的每一行上執行該處理。當你做一些像select count(*)
這樣特別愚蠢的事情時,你會執行所有額外的處理,不會帶來任何好處。
當您過濾查詢時,僅在限定結果集上執行額外處理。如果該結果集只有一行,則處理將僅在單行上執行,從視圖中呈現性能(當然取決於處理的確切數量和類型)實際上與表格無法區分。
我總是建議使用視圖 - 許多視圖 - 向用戶展示最適合其各種用途的數據。盡一切辦法測試這些意見。但使用有意義的測試。
檢查視圖的來源,它應該給你一個答案。 – 2014-10-31 07:49:06