2009-01-19 36 views
4

我只是閱讀我公司的代碼準則,它說永遠不會將變量當作一個常量在sql server中使用,而是使用文字。理由是,當你在查詢中使用變量時,sql server不能建立一個好的執行計劃。TSQL常量...使用變量還是文字?

有人知道這是否仍然如此?我們使用的是MSSQL 2005,這個文檔可能已經寫入2000.

回答

3

這對於SQL Server 2005來說「通常」是正確的,因爲它現在試圖爲儘可能多的查詢預先生成執行計劃。你的情況可能會有所不同,因爲它取決於您的數據和特區政府(測試你的查詢計劃,看看),但這TECDOC(他們使用SQL Server 2005的預發佈版本)規定:

http://www.microsoft.com/technet/prodtechnol/sql/2005/qrystats.mspx

避免使用局部變量的查詢

如果您在查詢 謂語,而不是一個參數或 文字,優化度假村到 質量降低的估計,或者選擇性猜測 使用局部變量該謂詞。在查詢 中使用 參數或文字替代本地變量,而 優化器通常將能夠 選擇更好的查詢計劃。例如, 考慮使用本地 變量的此查詢:

1

我不知道這是否總是如此,但是使用一個變量不能被評估,直到執行時間將限制優化器在做出優化決策時使用它收集的有關表的任何統計信息。所引用的文章討論了這一點,並提供了一些關於如何幫助SQL Server在無法避免時做出優化決策的提示。

編號:http://www.sqlmag.com/Article/ArticleID/42801/sql_server_42801.html

1

SQL Server可以,如果它用文字構建一個更好的執行計劃。我看到一個案例涉及一個分區視圖。如果從分區視圖中選擇一個變量,則SQL將在運行時評估該變量,其中就像使用文字SQL恰好在基礎表之後一樣。

雖這麼說,你硬編碼前應該測試,如果你有兩個查詢只由文字不同,那麼這將是一個氣味。