SQL Server 2008R2を使用しています。SQL Server 2008R2ユーザー定義関数(テーブル値)のパフォーマンス
-- Query #1
SELECT * FROM
Product P
INNER JOIN ProductComments C ON C.ProductId = P.ProductId
-- Query #2
SELECT * FROM
GetAllProducts() P
CROSS APPLY GetCommentsOfProduct(P.ProductId) C
GetAllProducts()
が
CREATE FUNCTION GetAllProducts
(
)
RETURNS TABLE
AS
RETURN
(
SELECT * FROM Product
)
とGetCommentsOfProduct(P.ProductId)
がで
CREATE FUNCTION [dbo].[GetCommentsOfProduct]
(
@ProductId int
)
RETURNS TABLE
AS
RETURN
(
SELECT * FROM ProductComments WHERE ProductId = @ProductId
)
クエリ#1とクエリ#2の両方の結果である:
私は次のセットアップを持っています正確な同じ実際の実行計画と同じ結果を返します。クエリのコストは、バッチに対して50%です。これは、SQLクエリオプティマイザがこれらのクエリを同じクエリに変換することを意味しますか?そして、なぜUDFを呼び出すためのオーバーヘッドがないのですか?そして、私はすべてのテーブルをUDFに構造化することができ、JOIN操作を行ってもパフォーマンスの問題は発生しません。あなたは悪いことを知っていますか?
実行計画の見積もりまたは実際?あなたは代わりにこの目的のために 'VIEW'を使うべきです... – Yuck
"あなたはどんな不利な点も知っていますか? - 気にしないでください、何が面白いのですか? – AakashM
@Yuck:実際の実行計画 – Chris