¿Por qué 'HASH JOIN' o 'LOOP JOIN' mejoran este proceso almacenado?
Tengo una consulta básica que va de 6 segundos a 1 segundo con solo cambiar una combinación deLEFT JOIN
aLEFT HASH JOIN
o 'IZQUIERDA LOOP IZQUIERDA'. ¿Alguien puede explicar por qué esto causaría un aumento tan grande en el rendimiento y por qué el optimizador de SQL no lo está resolviendo por sí mismo?
Aquí es aproximadamente cómo se ve el SQL:
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'
Las tablas A y B tienen millones de registros e índices en todos los campos de ID. Utilizando SQL Server 2005.
Editar: Un colega sugirió un IZQUIERDA DE LOOP IZQUIERDA y parece que lo hizo aún más rápido ... SQL no es una de mis fortalezas, así que estoy tratando de entender cómo están ayudando estos "consejos".