不是很大的看法(不記得上次我寫了一個),但也不完全禁止它們。如果您的數據庫允許您在視圖上放置索引,而不僅僅放在桌面上,那麼通常可以提高性能,使其更好。如果您正在使用視圖,請務必查看它們的索引。
我真的只看到了需要爲視圖數據分區和極其複雜的連接是給應用程序(這裏的財務報告,其中從一切相同的數據集開始可能是批判性思維)真正的關鍵。我知道一些報表工具似乎更喜歡存儲過程的視圖。
我是一個很大的支持者,不會在特定實例中返回比您需要的更多記錄或字段,並且過度使用視圖往往會使人們返回比他們需要的更多字段(並且太多情況下,太多聯接)這浪費了系統資源。
我還傾向於看到依賴視圖的人(不是視圖的開發人員 - 只使用視圖的人)往往不能很好地理解數據庫(所以如果不使用它們會導致連接錯誤視圖),對我來說,編寫針對數據庫的良好代碼至關重要。我希望人們瞭解他們要求分貝做什麼,而不是依賴視圖的一些魔術黑盒子。當然這都是個人意見,你的里程可能會有所不同。
布拉姆一樣,我個人還沒有發現它們更容易維護比存儲的特效。
編輯於2010年10月添加: 由於我原本寫這個,我有機會與由沉迷於使用視圖的人設計的幾個數據庫一起工作。更糟糕的是,他們使用調用視圖的視圖(最終達到可以調用的表的數量限制)的視圖。這是一場表演噩夢。花費8分鐘在一個視圖中獲取記錄的簡單計數(*),並花費更長的時間才能獲取數據。如果您使用視圖,請謹慎使用調用其他視圖的視圖。您將構建一個系統,在生產的正常性能負載下很可能無法正常工作。在SQL Server中,您只能索引不調用其他視圖的視圖,因此當您在鏈中使用視圖時最終發生的情況是,必須爲每個視圖構建整個記錄集,直到找到最後一個應用where子句條件。您可能需要生成數百萬條記錄才能看到三條記錄。如果您真的只需加入一次,您可以連接6次同一張表,但在最終結果集中,您可能會返回比您需要的更多的列數。
+1,但我遇到過設計不好的情況導致可怕表現的情況。情況是SQL2K有兩個視圖執行工會,然後在第三個視圖中加入。在這個特定情況下,性能降低了1000倍。 – BlackWasp 2009-02-23 22:18:30
遇到此問題。我們正在爲有性能問題的公司提供諮詢服務。我們也給他們一個基於PDA的解決方案,以配合他們現有的系統。他們對每張桌子都有一個觀點。他們對系統使用的每個查詢都有一個視圖。而且他們希望我們能夠爲我們基於PDA的系統訪問其數據庫所用的每個查詢分別提供一個視圖。我告訴他們這是一個可怕的想法。我應該繼續他們的做事方式嗎?我可以將此作爲單獨的問題發佈在SO上。 – 2012-04-11 12:37:17