以下のクエリを実行すると、ほぼ2.30分かかります。日付でチェックするとSQL Server 2014が非常に遅く動作するのはなぜですか?
select Clientid,
Sum(Qty * Rate) BuyVolume
from Table1 S(nolock)
join table2 T on T.ReferrentClientId = S.Clientid
where S.Column2 = 'B'
and S.Date >= T.Date
and S.Date <= T.Date +30
Group by Clientid
しかし、私がT.Dateを '2016-12-23 00:00:00.000'とした場合、結果は1秒で取得されます。
select Clientid,
Sum(Qty * Rate) BuyVolume
from Table1 S(nolock)
join table2 T on T.ReferrentClientId = S.Clientid
where S.Column2= 'B'
and S.Date >= '2015-12-23 00:00:00.000'
and S.Date <= '2016-01-22 00:00:00.000'
Group by Clientid
表1には47589000行が含まれ、表2には5行のみが含まれています。 結果セットには2つの行しか含まれていません。どちらの日付列も日時形式です。
私の実行をスピードアップする方法はありますか?
実行計画とインデックスの詳細を投稿できますか? – GarethD
ロックテーブルのヒントは使用しない理由がありますが、[この記事](https://blogs.sentryone.com/aaronbertrand/bad-habits-nolock-everywhere/)では、 。 TL/DR; NoLockは、基礎となるデータと一致しない結果を返すことができます。 –
日付比較を 'WHERE'から' ON'節に移動すると助けになりますか? –