Por que o 'HASH JOIN' ou o 'LOOP JOIN' aprimora esse procedimento armazenado?
Eu tenho uma consulta básica que vai de 6 segundos a 1 segundo apenas alterando uma junção deLEFT JOIN
paraLEFT HASH JOIN
ou 'LEFT LOOP JOIN'. Alguém pode explicar por que isso causaria um aumento tão grande no desempenho e por que o otimizador do SQL não está descobrindo por conta própria?
Aqui está aproximadamente o que o SQL se parece:
SELECT
a.[ID]
FROM
[TableA] a
LEFT HASH JOIN
[TableB] b
ON b.[ID] = a.[TableB_ID]
JOIN
[TableC] c
ON c.[ID] = a.[TableC_ID]
WHERE
a.[SomeDate] IS NULL AND
a.[SomeStatus] IN ('X', 'Y', 'Z') AND
c.[SomethingElse] = 'ABC'
A tabela A e B tem milhões de registros e índices em todos os campos de ID. Usando o SQL Server 2005.
Editar: Um colega sugeriu um LEFT LOOP JOIN e parece ter sido ainda mais rápido ... O SQL não é um dos meus pontos fortes, então estou tentando entender como essas 'dicas' estão ajudando.