Ich habe eine korrelierte Unterabfrage wie diese (von BOL ):
SELECT DISTINCT c.LastName, c.FirstName, e.BusinessEntityID
FROM Person.Person AS c JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = c.BusinessEntityID
WHERE 5000.00 IN
(SELECT Bonus
FROM Sales.SalesPerson sp
WHERE e.BusinessEntityID = sp.BusinessEntityID) ;
GO
Wenn ich diese Abfrage mit Joins umschreibe
select c.LastName, c.FirstName, e.BusinessEntityID, d.Bonus
from Person.Person as c
inner join HumanResources.Employee as e on e.BusinessEntityID = c.BusinessEntityID
inner join Sales.SalesPerson as d on d.BusinessEntityID = c.BusinessEntityID
where Bonus = 5000.00
Und schauen Sie sich den tatsächlichen Ausführungsplan an, er sieht in beiden Abfragen genauso aus. Warum? Ich dachte, dass die korrelierte Unterabfrage aufgrund der verschachtelten Schleife viel langsamer ist und der Ausführungsplan anders aussieht. Liegt es daran, dass diese Tabellen nicht viele Daten enthalten?
[sql-server]
, nicht [mysql]
.