INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL JOIN 有什么区别
首先回答这个问题:在编写查询时,哪种 T-SQL 方法的性能 LEFT JOIN 或 NOT IN 更好?答案是:*视情况而定!* 这完全取决于数据类型和查询类型等。在这种情况下,只是为了好玩猜测一个选项 LEFT JOIN 或 NOT IN。如果您需要参考演示上述子句的查询,请查看以下两个查询以了解加入更好的性能。
USE AdventureWorks;``GO``SELECT` `ProductID``FROM` `Production.Product``WHERE` `ProductID``NOT` `IN` `(``SELECT` `ProductID``FROM` `Production.WorkOrder);``GO``SELECT` `p.ProductID``FROM` `Production.Product p``LEFT` `JOIN` `Production.WorkOrder w ``ON` `p.ProductID = w.ProductID``WHERE` `w.ProductID ``IS` `NULL``;``GO
现在让我们检查两个查询的实际执行计划。点击图片查看大图。
您可以清楚地观察到第一个带有 NOT IN 的查询占用了执行计划的 20% 资源,而 LEFT JOIN 占用了执行计划的 80% 资源。在此特定示例中,最好使用 NOT IN 子句而不是 LEFT JOIN。请注意,这不是一般结论,仅适用于本示例。