Kuri iš šių užklausų yra greitesnė?
NĖRA:
SELECT ProductID, ProductName
FROM Northwind..Products p
WHERE NOT EXISTS (
SELECT 1
FROM Northwind..[Order Details] od
WHERE p.ProductId = od.ProductId)
Arba NĖRA:
SELECT ProductID, ProductName
FROM Northwind..Products p
WHERE p.ProductID NOT IN (
SELECT ProductID
FROM Northwind..[Order Details])
Užklausos vykdymo plane teigiama, kad abu jie daro tą patį. Jei taip, kuri forma yra rekomenduojama?
Tai pagrįsta "NorthWind" duomenų baze.
[Redaguoti]
Ką tik radau šį naudingą straipsnį: http://weblogs.sqlteam.com/mladenp/archive/2007/05/18/60210.aspx
Manau, kad aš'liksiu su NOT EXISTS.
Tai priklauso nuo..
SELECT x.col
FROM big_table x
WHERE x.key IN( SELECT key FROM really_big_table );
nebūtų santykinai lėtas nėra'ne daug apriboti dydį, ką užklausa patikrinti, ar jie raktas yra. EXISTS šiuo atveju būtų geriau.
Tačiau, priklausomai nuo DBVS optimizatoriaus, gali būti ir kitaip.
Pavyzdys, kada geriau naudoti 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