問題是:可以使用內聯表值函數(ITVF)來封裝和重用代碼嗎?或者這會導致性能問題?使用內聯表值函數封裝SQL代碼的性能
我研究聯表值函數,這使我這個討論: When would you use a table-valued function?
討論的回答指出值函數「內嵌表允許優化治療這些功能沒有區別對象他們封裝給你最佳的性能(假設你的索引和統計數據是理想的)。「
我最初的問題是,我試圖將不同的數據源重新格式化爲標準格式,然後將它們合併。我測試了聯合6個不同的ITVF,而不是在一個查詢中執行聯合和轉換。執行計劃是相同的。由於我的背景是在oop中,我寧願將查詢拆分成更小的函數,但在我承諾在將來的項目中這樣做時,我想知道是否使用過多的ITVF最終會導致性能問題。
只是不要陷入這樣一種常見的誤解,即添加「RETURNS TABLE」使您的函數內聯。它必須只是一個單一的陳述。如果你有變量或者多行代碼,那麼性能將會非常糟糕......甚至比標量函數還要糟糕。 –
@SeanLange什麼算作一個單一的陳述?是工會,交叉適用和子查詢是否考慮過一個或多個陳述? –
這將是一個單一的陳述。如果你必須把開始/結束塊,你沒有內聯函數。如果你的函數定義是「... AS RETURN ...」,你的狀態良好。 :) –