试图获得所有出价的人的名字(我假设这些表格不言而喻)会产生以下结果。
此加入需要10秒
select U.firstname
from Bid B
inner join [User] U on U.userName = B.[user]
此子查询查询需要3秒
select firstname
from [User]
where userName in (select [user] from bid)
为什么我的实验不符合我到处阅读的内容,或者我错过了什么?
试验我发现在向两者添加不同之后执行时间是相同的。
答案 0 :(得分:0)
他们不是一回事。在带有连接的查询中,您可以将行相乘或从结果中完全删除行。
Inner Join删除非匹配键上的行。它还会在任何匹配的键上乘以行,这些键在连接的一个或两个表中重复。内部联接通过增加和删除行的附加步骤。
您使用的子查询是SELECT。由于没有使用WHERE的过滤器,因此它与简单的SELECT一样快,并且由于没有连接,因此可以在选择结果的同时获得结果。
有些人可能认为外连接返回NULL类似于子查询 - 但它们仍然可以乘以行。因此,子查询和连接不是一回事。
在您提供的查询中,您希望使用第二个查询(带有子查询的查询),因为它不会乘以或删除行。
答案 1 :(得分:0)
对子查询与内部加入的良好读取
https://www.essentialsql.com/subquery-versus-inner-join/