哪个查询更快?
不存在:
SELECT ProductID, ProductName
FROM Northwind..Products p
WHERE NOT EXISTS (
SELECT 1
FROM Northwind..[Order Details] od
WHERE p.ProductId = od.ProductId)
Run Code Online (Sandbox Code Playgroud)
或者不是:
SELECT ProductID, ProductName
FROM Northwind..Products p
WHERE p.ProductID NOT IN (
SELECT ProductID
FROM Northwind..[Order Details])
Run Code Online (Sandbox Code Playgroud)
查询执行计划表明他们都做同样的事情.如果是这种情况,这是推荐的形式?
这基于NorthWind数据库.
[编辑]
刚刚找到这篇有用的文章:http: //weblogs.sqlteam.com/mladenp/archive/2007/05/18/60210.aspx
我想我会坚持使用NOT EXISTS.
我很好奇以下哪一项会更有效率?
我一直对使用有点谨慎,IN
因为我相信SQL Server会将结果集转化为一个大的IF
声明.对于大的结果集,这可能导致性能不佳.对于小结果集,我不确定是否更可取.对于大型结果集,EXISTS
效率会不会更高?
WHERE EXISTS (SELECT * FROM Base WHERE bx.BoxID = Base.BoxID AND [Rank] = 2)
Run Code Online (Sandbox Code Playgroud)
与
WHERE bx.BoxID IN (SELECT BoxID FROM Base WHERE [Rank = 2])
Run Code Online (Sandbox Code Playgroud)