実行に約10分かかる次のクエリを参照してください。これは、より速く、主にwhere句の条件を結果を取得するために書き換えることができます...レコードのSQL Server:百万レコードテーブルのデータに基づいてWHERE句を書き換えます
数:
- 表のtmp_TimeIntervals:1440
- 表のtmp_Activities:1299688
コード:
ごあいさつ
実行に約10分かかる次のクエリを参照してください。これは、より速く、主にwhere句の条件を結果を取得するために書き換えることができます...レコードのSQL Server:百万レコードテーブルのデータに基づいてWHERE句を書き換えます
数:
コード:
ごあいさつ
次のようにSQLクエリが見えることがあります。
select
i.ID,
sl.SPID,
i.PeriodStart,
DATEDIFF(mi, i.PeriodStartUTC, sl.ENDTIME)
from tmp_TimeIntervals i
join tmp_Activities sl
on sl.StartTime <= i.PeriodEndUTC and sl.Endtime > i.PeriodStartUTC
かつ効率的に実行するために、あなたは間違いなく、インデックスtmp_Activities(StartTime , Endtime, SPID)
を必要としています。 SPID
は、クラスタ化インデックスのキーであれば削除できます。
create index ix_tmp_Activities on tmp_Activities(StartTime , Endtime) include (SPID)
別指数tmp_TimeIntervals(PeriodEndUTC, PeriodStartUTC, PeriodStart, ID)
は、より簡単に参加するSQL Serverは、マージを使用することができるためにも役立ちます。再度ID
は、クラスタード・インデックスのキーであれば、そのインデックスから削除できます。
create index ix_tmp_TimeIntervals on tmp_TimeIntervals(PeriodEndUTC, PeriodStartUTC) include (PeriodStart, ID)
@ user3657339このアプローチを使用したクエリ処理の結果の時間はどのくらいですか?ありがとう –
フレームワークを使用している場合は、組み込みのメソッドを使用してチャンクでレコードを取得します。あなたはtmp_TimeIntervals
とtmp_Activities
に重なり合う間隔をしたい場合は
推定実行プランをチェックして、アップ噛んでいただきました!コストをチェックするとよいでしょう 物事のカップル。
左外部ジョインを試してください。内側ジョイントよりも高速なサブクエリルックアップが作成されます。 概念はプッシュダウン述語です。
インデックスチェック列の長さを作成する前の別の比較。データの書き込みが頻繁ではない場合、列ストアのインデックスを生成することは、現在のtouのものより10倍高速です。
期待している試合の回数はいくつですか?重複がありますか、1つの試合しか期待していませんか?サンプルデータと望ましい結果が得られます。 –
現在どのインデックスがありますか?クエリプランも良いでしょう。 –
オーバーラッピング間隔を探したいですか? –