这些查询中哪个更快?
不存在。
SELECT ProductID, ProductName
FROM Northwind..Products p
WHERE NOT EXISTS (
SELECT 1
FROM Northwind..[Order Details] od
WHERE p.ProductId = od.ProductId)
或不在。
SELECT ProductID, ProductName
FROM Northwind..Products p
WHERE p.ProductID NOT IN (
SELECT ProductID
FROM Northwind..[Order Details])
查询执行计划说它们都是做同样的事情。 如果是这样的话,哪种形式是推荐的?
这是以NorthWind数据库为基础的。
[编辑]
刚发现这篇有帮助的文章。 http://weblogs.sqlteam.com/mladenp/archive/2007/05/18/60210.aspx
我想我将坚持使用 "不存在"。
这取决于...
SELECT x.col
FROM big_table x
WHERE x.key IN( SELECT key FROM really_big_table );
会不会比较慢,并没有什么限制查询的大小,看看他们的键是否在里面。在这种情况下,EXISTS是比较好的。
但是,根据DBMS的优化器,这可能没什么不同。
举个例子说明什么时候EXISTS更好
SELECT x.col
FROM big_table x
WHERE EXISTS( SELECT key FROM really_big_table WHERE key = x.key);
AND id = very_limiting_criteria