1

次のクエリに進みます。

SELECT *
FROM FactALSAppSnapshot AS LB 
     LEFT OUTER JOIN MLALSInfoStage AS LA ON LB.ProcessDate = LA.ProcessDate AND 
                                                   LB.ALSAppID = LA.ALSNumber
     LEFT OUTER JOIN MLMonthlyIncomeStage AS LC ON LB.ProcessDate = LC.ProcessDate AND
                                                        LB.ALSAppID = LC.ALSNumber
     LEFT OUTER JOIN DimBranchCategory AS LI on LB.ALSAppBranchKey = LI.Branch
WHERE LB.ProcessDate=(SELECT TOP 1 LatestProcessDateKey
                      FROM DimDate)

WHERE条件がスカラー サブクエリであることに注意してください。これの実行時間は0:54レコードになり367,853ます。

ただし、WHERE句を次のように切り替えると:

WHERE LB.ProcessDate=20161116

これにより、何らかの理由でクエリ ランタイムがジャンプアップし、57:33結果として367,853レコードが生成されます。ランタイムでこの巨大なジャンプを引き起こす舞台裏で何が起こっているのでしょうか? リテラルの整数値ではなく、サブクエリのバージョンに時間がかかると予想していました。

(リストの最後の結合)としてエイリアス化されLIたテーブルは、そのキーでインデックスが作成されていない唯一のテーブルのようであり、そのテーブルを結合として削除し、整数を使用すると、クエリを最初のクエリに近づけて実行できるようです。サブクエリの代わりに値。

SQL サーバー 11

4

1 に答える 1