次のクエリに進みます。
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