2013-01-21 56 views
0

我已經繼承了現有的系統,並試圖找出一些事情。SQL View優化

系統確實基於myViewCol

Table1一個

SELECT * FROM v_myView WHERE mvViewCol = 'someValue' 

v_myView執行總和是否SQL Server 2005中優化查詢或將永遠求和整個Table1發生?

據我所知,我可以使用參數化視圖,但不想不必要地改變事情。

乾杯 傑夫

+0

您可以嘗試構建查詢執行計劃並查看發生了什麼。 –

+0

在SQL Server中沒有這樣的參數化視圖。 –

+0

感謝Aaron的糾正。我應該說'內聯表值函數' –

回答

2

查看有沒有運行成本可言。它們總是內聯到周圍的查詢中,就像您將視圖定義粘貼爲文本一樣。否則使用它們將是不切實際的。

SQL Server(2005)是否優化查詢或將總計在整個Table1中進行求和。

它會被優化。

0

SQL Server 2005的各則在查詢中引用時間將優化視圖:「視圖膨脹之後,SQL Server查詢優化編譯爲執行查詢單個執行計劃」 http://technet.microsoft.com/en-us/library/cc917715.aspx

我沒有安裝2005,但它的操作與2008R2類似 - 要查看查詢優化計劃,請在查詢窗口中右鍵單擊並選擇「顯示預計執行計劃」以獲取更多信息並查找任何瓶頸。

在「查詢」菜單選項中,「分析數據庫優化顧問中的查詢」可能對您也有好處。

1

這是一個複雜的問題。我認爲最好的解釋是here。我確實希望微軟文檔在這一點上更清楚一些。

當一個視圖被創建時,查詢被解析。這確保它是正確的。

執行計劃是在第一次運行查詢時確定的(近似)。這個執行計劃然後保留在計劃緩存中用於後續調用。因此,如果您在適當的列上有一個索引,並且第一次執行有一個使用該索引的where子句,則後續調用也將使用該索引。

我說的很近似,因爲當計劃不在計劃緩存中時,它確實是第一次將視圖稱爲。對數據庫的某些更改將刷新計劃,同樣會重新啓動服務器。

因此,如果您只訪問where子句的視圖,那麼視圖的後續使用將針對該目的進行優化。