Verschillen tussen EXISTS en IN-operators in SQL

Schrijver: Peter Berry
Datum Van Creatie: 11 Augustus 2021
Updatedatum: 10 Juni- 2024
Anonim
IN VS EXISTS VS JOIN, performance
Video: IN VS EXISTS VS JOIN, performance

Inhoud

Een constante uitdaging bij het gebruik van SQL is het bepalen van het juiste gebruik van de EXISTS- en IN-operatoren. De twee operators kunnen dezelfde resultaten produceren, maar niet altijd. Daarnaast is er veel discussie over hoe elke operator is geoptimaliseerd voor snelheid. Gebruikers moeten de verschillende kenmerken van elke operator begrijpen en met de twee experimenteren om het juiste gebruik te bepalen.


Overweeg uw SQL-doelen bij het kiezen van EXISTS of IN (Jupiterimages / Photos.com / Getty Images)

IN-operator

De IN-operator retourneert een rij als de veldwaarde van een tabel voldoet aan de WHERE-voorwaarde in een lijst met IN-waarden. Het wordt meestal gebruikt als onderdeel van een hoofdquery of in combinatie met een subquery.

Voorbeeld 1: WHERE table.field IN ('a', 'b', 'c') Voorbeeld 2: WHERE table.field IN (Subquery die een set retourneert)

EXISTS-operator

De EXISTS-operator retourneert alle hoofdrijen als een subquery rijen bevat. Het wordt alleen gebruikt in combinatie met een subquery. De geretourneerde rijen worden bepaald door het filter in de hoofdquery.

Voorbeeld: WHERE EXISTS (Subquery die een set retourneert)

verschil

De IN-operator kan NULL-waarden niet evalueren, dus zulke regels zullen altijd onwaar zijn en zullen niet worden geretourneerd, in tegenstelling tot de EXISTS-operator, die lijnen met NULL-waarden evalueert en retourneert.


gelijkenissen

Zowel EXISTS als IN ondersteunen gecorreleerde en niet-gecorreleerde subquery's en beide kunnen vergelijkbare resultaten produceren. Wanneer gecorreleerd, voldoen ze aan een hoofdzoekveld voor een subqueryveld (bijvoorbeeld: principal.id = subquery.id). De subquery evalueert rij per rij, voor elk gevonden exemplaar. In dit geval zullen IN en EXISTS dezelfde regels retourneren op basis van vergelijkbare "id" -voorwaarden. Wanneer ze niet zijn gecorreleerd, verwerken de twee operators hun subquery's en combineren ze vervolgens de resultaten voor de hoofdquery.

prestatie

De prestaties worden bepaald door de databaseoptimalisatie en het uitvoeringsplan dat wordt gebruikt voor de uitgevoerde code. Voor EXISTS en IN kan de optimizer verschillende paden kiezen. In Oracle is NOT EXISTS meestal sneller dan NOT IN. Uiteindelijk zijn enkele pogingen en fouten vereist om het kortste pad te sorteren, afhankelijk van de database en versie die wordt gebruikt. Zorg ervoor dat u de operator gebruikt die eerst de juiste resultaten garandeert en probeer vervolgens de operators te vervangen om te zien welke de snelste is.