イベントをテーブルに挿入します - 開始イベントと終了イベントです。関連するイベントは同じ internal_id 番号を持ち、90 秒のウィンドウ内に挿入されます。テーブルで頻繁に自己結合を行います。
create table mytable (id bigint identity, internal_id bigint,
internal_date datetime, event_number int, field_a varchar(50))
select * from mytable a inner join mytable b on a.internal_id = b.internal_id
and a.event_number = 1 and b.event_number = 2
ただし、毎日何百万ものリンクされたイベントを持つことができます. クラスター化されたキーは internal_date であるため、パーティション レベルまでフィルター処理できますが、パフォーマンスは依然として平凡です。
and a.internal_date >='20120807' and a.internal_date < '20120808'
and b.internal_date >='20120807' and b.internal_date < '20120808'
さらに絞り込む SARGable な方法はありますか? これを追加しても機能しません - SARGable ではありません:
and a.internal_date <= b.internal_date +.001 --about 90 seconds
and a.internal_date > b.internal_date - .001 --make sure they're within the window
これはポイント クエリ用ではないため、1 回限りのクエリを実行しても役に立ちません。何千ものレコードを検索しており、開始イベントと終了イベントからのイベントの詳細が必要です。
ありがとう!