0
我有一個SQL Server 2008中的函數的問題,如果我用函數執行一個查詢,它需要40秒,如果我刪除函數並添加函數的邏輯在查詢中,是0秒!在查詢中調用SQL函數
任何人都可以解釋我爲什麼使用功能也可以這麼慢的原因是什麼?我真的想要使用函數來封裝邏輯,但我沒有找到方法......
我有一個SQL Server 2008中的函數的問題,如果我用函數執行一個查詢,它需要40秒,如果我刪除函數並添加函數的邏輯在查詢中,是0秒!在查詢中調用SQL函數
任何人都可以解釋我爲什麼使用功能也可以這麼慢的原因是什麼?我真的想要使用函數來封裝邏輯,但我沒有找到方法......
在JOIN或WHERE子句中使用標量UDF可以防止使用索引強制SQL Server執行表掃描。它還會阻止SQL Server正確估計行計數,這可能會在稍後導致錯誤的計劃選擇。還有每行可以加起來的調用成本。
一般而言,遠離標量值的UDF遠是個好主意。但是,您可以使用內聯表值函數來封裝您的邏輯。它們像視圖一樣處理並由優化器解決。重要的是您正在使用內聯TVF類型。多語句TVF甚至比標量UDF差。
更多詳情請查閱我的文章:Performance Comparisons of different types of Functions
將函數內的代碼貼出來。 – 2012-11-01 15:17:29
提供了一些代碼?也是函數標量的類型?內聯表?它是如何使用這個函數做什麼的? – JoshBerke
在WHERE或JOIN子句中調用函數嗎? – SchmitzIT