У меня есть две таблицы, и я ищу строки в одной таблице, в которой столбец времени , а не рядом с любым из значений в столбце времени другой таблицы. («Ближайший» определяется как «в пределах минуты».)
Вот пример кода:
create table temp1
(
id int identity primary key,
value datetime not null
)
GO
create index ix_temp1 on temp1(value, id);
GO
set nocount on
insert temp1 (value) values (DATEADD(second, rand() * 1000000, '20100101'))
GO 15000
таблица temp2 настроена идентично:
create table temp2
(
id int identity primary key,
value datetime not null
)
GO
create index ix_temp2 on temp2(value, id);
GO
set nocount on
insert temp2 (value) values (DATEADD(second, rand() * 1000000, '20100101'))
GO 15000
И вот мой первый взлом (который очень неэффективен)
SELECT t1.id, t1.value
FROM temp1 t1
LEFT JOIN temp2 t2
ON t1.value between DATEADD(MINUTE, -1, t2.value) and DATEADD(MINUTE, 1, t2.value)
WHERE t2.value is null
Я ищу способы сделать это более эффективно. Будут рассмотрены все решения (новые индексы, решение SSIS, решения CLR, временные таблицы, курсоры и т. Д.)