2012-11-01 38 views
0

我有一個SQL Server 2008中的函數的問題,如果我用函數執行一個查詢,它需要40秒,如果我刪除函數並添加函數的邏輯在查詢中,是0秒!在查詢中調用SQL函數

任何人都可以解釋我爲什麼使用功能也可以這麼慢的原因是什麼?我真的想要使用函數來封裝邏輯,但我沒有找到方法......

+6

將函數內的代碼貼出來。 – 2012-11-01 15:17:29

+0

提供了一些代碼?也是函數標量的類型?內聯表?它是如何使用這個函數做什麼的? – JoshBerke

+0

在WHERE或JOIN子句中調用函數嗎? – SchmitzIT

回答

0

在JOIN或WHERE子句中使用標量UDF可以防止使用索引強制SQL Server執行表掃描。它還會阻止SQL Server正確估計行計數,這可能會在稍後導致錯誤的計劃選擇。還有每行可以加起來的調用成本。

一般而言,遠離標量值的UDF遠是個好主意。但是,您可以使用內聯表值函數來封裝您的邏輯。它們像視圖一樣處理並由優化器解決。重要的是您正在使用內聯TVF類型。多語句TVF甚至比標量UDF差。

更多詳情請查閱我的文章:Performance Comparisons of different types of Functions