de-vraag
  • Klausimai
  • Žymos
  • Vartotojai
Pranešimai
Apdovanojimai
Registracija
Užsiregistravę gausite pranešimus apie atsakymus ir komentarus į savo klausimus.
Prisijungti
Jei jau turite paskyrą, prisijunkite ir patikrinkite naujus pranešimus.
Už pridėtus klausimus, atsakymus ir komentarus bus skiriami apdovanojimai.
Daugiau
Šaltinis
Redaguoti
 ilitirit
ilitirit
Question

NE Į vs NEegzistuoja

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.

502 2008-10-06T02:19:05+00:00 3
 reto
reto
Redaguotas klausimas priešpietr lapkritis 2012 в 10:52
Programavimas
sql
sql-server
notin
Šis klausimas turi 1 atsakymas atsakymų anglų kalba, norėdami juos perskaityti prisijunkite prie savo paskyros.
John Millikin
John Millikin
priešpietr spalis 2008 в 2:21
2008-10-06T02:21:46+00:00
Daugiau
Šaltinis
Redaguoti
#8540685

Jei vykdymo planuotojas sako, kad jie vienodi, vadinasi, jie vienodi. Naudokite tą iš jų, kuris labiau atskleis jūsų ketinimus, šiuo atveju - antrąjį.

23
0
James Curran
James Curran
priešpietr spalis 2008 в 2:40
2008-10-06T02:40:33+00:00
Daugiau
Šaltinis
Redaguoti
#8540687

Tiesą sakant, manau, kad tai būtų greičiausia:

SELECT ProductID, ProductName 
    FROM Northwind..Products p  
          outer join Northwind..[Order Details] od on p.ProductId = od.ProductId)
WHERE od.ProductId is null
14
0
Greg Ogle
Greg Ogle
priešpietr spalis 2008 в 2:32
2008-10-06T02:32:34+00:00
Daugiau
Šaltinis
Redaguoti
#8540686

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
-2
0
Pridėti klausimą
Kategorijos
Visi
Technologijos
Kultūra / poilsis
Gyvenimas / Menai
Mokslas
Profesionalus
Verslas
Vartotojai
Visi
Naujas
Populiarus
1
Elena Nudel
Registruota prieš 9 valandas
2
firdaus faizal
Registruota prieš 10 valandų
3
Виталий Теслюк
Registruota prieš 2 dienas
4
shokir qochqorov
Registruota prieš 2 dienas
5
Roxana Elizabeth CASTILLO Avalos
Registruota prieš 1 savaitę
BG
CS
DE
EL
ES
FI
FR
ID
IT
JA
KO
LT
NL
PT
RU
TR
ZH
© de-vraag 2022
Šaltinis
stackoverflow.com
pagal licenciją cc by-sa 3.0 nurodant autorystę