我有一個包含多個where子句的多個表的多個連接的情況。查看,索引視圖和連接查詢。對於多個連接,哪種性能更好?
一個簡單的視圖將始終運行select語句(這就是在任何情況下保存在數據庫中的內容),所以事後過濾數據看起來像是浪費時間。
索引視圖可以做同樣的事情,但也可以通過使用索引來加快速度。在MSDN,我們也讀到當在視圖中創建一個唯一的聚集索引,結果集存儲在數據庫就像一個表
多個連接將通過的where子句把正確的數據查詢,而不需要先把所有東西都帶進去,然後過濾它(簡單的視圖),也不需要在頻繁變化的數據上維護索引視圖的索引,但會導致更復雜的查詢。
這些連接涉及多達20個表(某些外部(2到4個)連接,因爲索引視圖不支持這些連接,所以需要以任意一種方式寫入),並且結果行數爲幾千(約2至4每個視圖中有100萬行)。
這是更多的設計問題,但在這種情況下最有效的(perfomrance-wise和storage wise)會是什麼?
P.S.每次在前端環境開發中寫這些查詢都很麻煩,這就是爲什麼我正在尋找另一種解決方案。
「*一個簡單的視圖將始終運行select語句(即在任何情況下保存在數據庫中)*」不,這不是視圖的工作方式。視圖本身不做任何事情,也不存儲任何數據。一個View只是一個SQL查詢的別名。它只能用於引用它的其他查詢。發生這種情況時,查詢編譯器會將其與查詢的所有其他部分一起優化,包括任何'WHERE'子句或其他約束。通常情況下,這會導致在視圖結果添加到其他任何內容之前應用外部顯式WHERE子句。 – RBarryYoung
謝謝你我不知道。我認爲它是一個嵌套查詢的別名。所以使用簡單視圖在效率方面沒有問題。但索引視圖更好嗎? –