当第二个表中不需要数据时,JOIN的效率是否比EXISTS IN更高/更低?

twp*_*wpc 6 sql sql-server join

我需要查看所有订单的家庭.我根本不关心订单的数据,只是它存在.(使用SQL Server)

说这样的话更有效率:

SELECT HouseholdID, LastName, FirstName, Phone 
FROM Households 
INNER JOIN Orders ON Orders.HouseholdID = Households.HouseholdID
Run Code Online (Sandbox Code Playgroud)

或这个:

SELECT HouseholdID, LastName, FirstName, Phone 
FROM Households 
WHERE EXISTS 
    (SELECT HouseholdID 
     FROM Orders 
     WHERE Orders.HouseholdID = Households.HouseholdID)
Run Code Online (Sandbox Code Playgroud)

Mar*_*ith 3

这 2 个查询不等价。如果有多个连接记录,第一个将返回多个结果。EXISTS 可能会更有效,尤其是在没有优化器可以使用的可信 FK 约束的情况下。

有关最后一点的更多详细信息,请参阅此处的第 9 点http://www.simple-talk.com/sql/t-sql-programming/13-things-you-should-know-about-statistics-and-the-query -优化器/