我已經繼承了現有的系統,並試圖找出一些事情。SQL View優化
系統確實基於myViewCol
的Table1
一個
SELECT * FROM v_myView WHERE mvViewCol = 'someValue'
和v_myView
執行總和是否SQL Server 2005中優化查詢或將永遠求和整個Table1
發生?
據我所知,我可以使用參數化視圖,但不想不必要地改變事情。
乾杯 傑夫
我已經繼承了現有的系統,並試圖找出一些事情。SQL View優化
系統確實基於myViewCol
的Table1
一個
SELECT * FROM v_myView WHERE mvViewCol = 'someValue'
和v_myView
執行總和是否SQL Server 2005中優化查詢或將永遠求和整個Table1
發生?
據我所知,我可以使用參數化視圖,但不想不必要地改變事情。
乾杯 傑夫
查看有沒有運行成本可言。它們總是內聯到周圍的查詢中,就像您將視圖定義粘貼爲文本一樣。否則使用它們將是不切實際的。
SQL Server(2005)是否優化查詢或將總計在整個Table1中進行求和。
它會被優化。
SQL Server 2005的各則在查詢中引用時間將優化視圖:「視圖膨脹之後,SQL Server查詢優化編譯爲執行查詢單個執行計劃」 http://technet.microsoft.com/en-us/library/cc917715.aspx
我沒有安裝2005,但它的操作與2008R2類似 - 要查看查詢優化計劃,請在查詢窗口中右鍵單擊並選擇「顯示預計執行計劃」以獲取更多信息並查找任何瓶頸。
在「查詢」菜單選項中,「分析數據庫優化顧問中的查詢」可能對您也有好處。
這是一個複雜的問題。我認爲最好的解釋是here。我確實希望微軟文檔在這一點上更清楚一些。
當一個視圖被創建時,查詢被解析。這確保它是正確的。
執行計劃是在第一次運行查詢時確定的(近似)。這個執行計劃然後保留在計劃緩存中用於後續調用。因此,如果您在適當的列上有一個索引,並且第一次執行有一個使用該索引的where
子句,則後續調用也將使用該索引。
我說的很近似,因爲當計劃不在計劃緩存中時,它確實是第一次將視圖稱爲。對數據庫的某些更改將刷新計劃,同樣會重新啓動服務器。
因此,如果您只訪問where
子句的視圖,那麼視圖的後續使用將針對該目的進行優化。
您可以嘗試構建查詢執行計劃並查看發生了什麼。 –
在SQL Server中沒有這樣的參數化視圖。 –
感謝Aaron的糾正。我應該說'內聯表值函數' –