En mis años como consultor he visto en muchas ocasiones que los programadores usan los JOIN para hacer algún tipo de búsqueda del tipo: Traer los clientes que no tienen ventas o cosas similares.
El JOIN como concepto esta mas pensado para buscar datos entre tablas y presentarlos, por ejemplo si tenemos una tabla facturas y otra clientes entonces es lógico que si necesitamos datos de clientes necesitemos hacer algún tipo de JOIN
En este post veremos el impacto de performance que tiene usar un LEFT JOIN para buscar por ejemplo los clientes que no tienen ordenes en lugar de usar un NOT EXISTS.
Veamos el siguiente ejemplo donde las dos consultas van a retornar los mismos resultados.
USE ADVENTUREWORKS2017
GO
SELECT * FROM PRODUCTION.PRODUCT P
WHERE NOT EXISTS
(
SELECT * FROM SALES.SALESORDERDETAIL D
WHERE P.PRODUCTID = D.PRODUCTID
)
SELECT P.* FROM PRODUCTION.PRODUCT P
LEFT JOIN SALES.SALESORDERDETAIL D
ON P.PRODUCTID = D.PRODUCTID
WHERE D.PRODUCTID IS NULL
Ahora bien vamos a ver que sucede con sus respectivos planes de ejecución


El costo del primer plan es de 0.10 y el segundo de 0.68 (casi 7 veces mas)
0 Comments
You must log in to post a comment.