Esta consulta (anônima) leva cerca de 2 minutos para ser executada.
SELECT
ly.Col1
,sr.Col2
,sr.Col3
,sr.Col4
INTO TempDb..TempLYT
FROM Tempdb..T1 ly
JOIN TempDb..T2 sr on sr.[DateTimeCol] BETWEEN ly.DateTimeStart and ly.DateTimeEnd
WHERE sr.Col5 = 1 OR sr.Col5 = 2
Existem algumas alternativas que ajudariam com esta consulta?
Depois de aplicar o índice sugerido por Paul White, o plano de consulta fica assim:
Certifique-se de ter um índice em T1 como:
Você pode inverter as colunas-chave dependendo de qual é mais seletiva com seu conjunto de dados.
O otimizador tende a introduzir um spool ansioso para uma das desigualdades e deixar a segunda em um Filtro. Reprodução:
Com o índice:
Naturalmente, a busca é apenas para a primeira coluna do índice. O segundo será um predicado residual.
Geralmente, as consultas de intervalo podem ser difíceis de otimizar. Dejan Sarka e Itzik Ben-Gan têm uma boa cobertura sobre o assunto: