Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Desempenho SQL em LEFT OUTER JOIN vs NOT EXISTS


O link de Joe é um bom ponto de partida. Quassnoi cobre isso também.

Em geral, se seus campos estão indexados corretamente OU se você espera filtrar mais registros (ou seja, tem muitas linhas EXIST na subconsulta) NOT EXISTS terá um desempenho melhor.

EXISTS e NOT EXISTS ambos em curto-circuito - assim que um registro corresponde aos critérios, ele é incluído ou filtrado e o otimizador passa para o próximo registro.

LEFT JOIN se juntará a TODOS OS REGISTROS independentemente de corresponderem ou não, filtre todos os registros não correspondentes. Se suas tabelas forem grandes e/ou você tiver vários JOIN critérios, isso pode ser muito, muito intensivo em recursos.

Eu normalmente tento usar NOT EXISTS e EXISTS onde possível. Para SQL Server, IN e NOT IN são semanticamente equivalentes e podem ser mais fáceis de escrever. Esses estão entre os únicos operadores que você encontrará no SQL Server com garantia de curto-circuito.