sql >> Base de Datos >  >> RDS >> Sqlserver

Rendimiento de SQL en LEFT OUTER JOIN vs NOT EXISTS

El enlace de Joe es un buen punto de partida. Quassnoi también cubre esto.

En general, si sus campos están indexados correctamente, O si espera filtrar más registros (es decir, tiene muchas filas EXIST en la subconsulta) NOT EXISTS funcionará mejor.

EXISTS y NOT EXISTS ambos cortocircuitos:tan pronto como un registro coincide con los criterios, se incluye o se filtra y el optimizador pasa al siguiente registro.

LEFT JOIN se unirá a TODOS LOS REGISTROS independientemente de si coinciden o no, luego filtre todos los registros que no coincidan. Si sus tablas son grandes y/o tiene múltiples JOIN criterios, esto puede requerir muchos recursos.

Normalmente trato de usar NOT EXISTS y EXISTS donde sea posible. Para SQL Server, IN y NOT IN son semánticamente equivalentes y pueden ser más fáciles de escribir. Estos son algunos de los únicos operadores que encontrará en SQL Server que garantizan un cortocircuito.