Forskjeller mellom eksisterer & I i SQL

Forskjeller mellom eksisterer & I i SQL


En vedvarende utfordring i å bruke SQL er å avgjøre riktig bruk av EXISTS og operatører. De to operatørene kan produsere de samme resultatene, men ikke alltid gjør det. Dessuten er det stor debatt om hvordan hver operatør er optimalisert for fart. Brukere bør forstå de forskjellige egenskapene til hver operatør og prøve begge for å bestemme den aktuelle funksjonen.

I Operator

IN operatør returnerer en rad hvis en HVOR betinget table.field verdi samsvarer med en liste over verdi. I brukes vanligvis som en del av en hovedspørring eller i forbindelse med en delspørring.

Eksempel 1: HVOR Table.Field i ( 'a', 'b', 'c')

Eksempel 2: HVOR Table.Field i (Subquery avkastning sett av verdier)

EXISTS Operator

Det eksisterer operatøren har alle hovedspørre rader hvis delspørringen inneholder noen rader.

Eksisterer er bare brukes i forbindelse med en delspørring. Rader returnert bestemmes ved å filtrere på hovedsøkenivå. Eksempel: HVOR FINNES (Subquery avkastning sett av verdier)

Forskjell

I kan ikke vurdere NULL, så de radene er alltid falsk, og ikke returnert.

FINNES kan vurdere NULL, så de radene kan returneres.

likheter

Eksisterer og i begge støtte korrelert og ikke-korrelert subqueries, og begge kan produsere hoved lignende resultater. Når korrelert eksisterer og i spillet en hovedspørringen feltet til en delspørringen felt (ex: main.id = subquery.id). Delspørringen evaluerer rad for rad for hver kamp funnet. I dette tilfellet vil inn og lever tilbake de samme rader basert på lignende id kamper. Når ikke-korrelert eksisterer og i prosess sine subqueries først, deretter matche resultatene til hovedspørringen.

Utførelse av eksisterer og IN

Ytelsen er bestemt av database optimizer og gjennomføringsplan syssels for koden henrettet. For eksisterer og IN, kan optimizer velge ulike veier. I Oracle, dette er IKKE eksisterer unngå en anti-bli med, og vanligvis beviser raskere enn NOT IN. Til slutt blir en del prøving og feiling er nødvendig for å benchmark den raskeste veien avhengig av database og det er versjonen som brukes. Sørg for å bruke den operatøren som sikrer de riktige resultatene først, så hvis alt er det samme, Prøv å erstatte eksisterer og å virkelig se noe som er raskere.