SQLが直接インライン化された場合に発生しないSQL Server 2008のインラインテーブル値関数を使用するための固有のコストはありますか?私たちのアプリケーションは、一般的なクエリを再利用するためにインラインテーブル値関数を非常に重視していますが、最近では、クエリを使用しないとクエリの実行速度が大幅に向上しています。私はこれを行う際に、今SQL Serverのインラインテーブル評価関数のコスト
CREATE FUNCTION dbo.fn_InnerQuery (@asOfDate DATETIME)
RETURNS TABLE
AS
RETURN
(
SELECT ... -- common, complicated query here
)
:
SELECT TOP 10 Amount FROM dbo.fn_InnerQuery(dbo.Date(2009,1,1)) ORDER BY Amount DESC
クエリは約15秒で結果を返します
が、この考えてみましょう。しかし
、私はこれを行う:1秒未満で
SELECT TOP 10 Amount FROM
(
SELECT ... -- inline the common, complicated query here
) inline
ORDER BY Amount DESC
クエリ戻ります。
この場合、テーブル値関数を使用するオーバーヘッドに少し困惑します。それを予想しなかった。私たちのアプリケーションでは、大量のテーブル機能を持っていますので、私がここで欠けているものがあるかどうか疑問に思っています。
gbn、リンクをありがとう。私はそれをもっと深く見なければならないでしょう。 UDFの実行計画はインラインバージョンよりはるかに複雑ですが、なぜそうであるのかはっきりしていません。どのようにパラメータを渡すと動作が変わるように見えますか? SELECT TOP 10金額からdbo.fn_InnerQuery(dbo.Date(2008,7,24))注文数量 が15秒で実行されます。 SELECT TOP 10金額dbo.fn_InnerQuery( '7/24/2008')注文数量 は1未満で実行されます。 – Linus
'2008年7月24日'を使用してからdbo.Date(2008、 7,24)インライン? – gbn