我们将事件插入到表中 - 一个开始事件和一个结束事件。相关事件具有相同的 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
这不适用于点查询,因此一次性执行也无济于事 - 我们正在搜索数千条记录,并且需要开始事件和结束事件的事件详细信息。
谢谢!