Een blijvende uitdaging in het gebruik van SQL is het bepalen van het juiste gebruik van de BESTAAT IN en operators . De twee operators kan leveren hetzelfde resultaat , maar niet altijd zo te doen. Ook is er een substantiële discussie over hoe elke exploitant is geoptimaliseerd voor snelheid . Gebruikers moeten de verschillende attributen van elke operator te begrijpen en proberen zowel om de juiste functie te bepalen . IN Operator De operator IN retourneert een rij als een WHERE geconditioneerde table.field waarde overeenkomt met een lijst van IN waarden . IN wordt meestal gebruikt als onderdeel van een hoofdquery of in combinatie met een subquery Voorbeeld 1 : . WHERE Table.Field in ( ' a ' , ' b ' , ' c ' ) op Twitter voorbeeld 2 : WHERE Table.Field in ( subquery 's terugkeer set van waarden ) bESTAAT operator de bESTAAT operator geeft alle hoofdquery rijen als de subquery geen rijen bevat . BESTAAT wordt alleen gebruikt in combinatie met een subquery . Rijen geretourneerd worden bepaald door het filteren op het hoofdquery niveau . Voorbeeld : WAAR BESTAAT ( Subquery 's terugkeer set van waarden ) Difference IN kan geen Null-waarden te evalueren , zodat die rijen zijn altijd vals , en niet teruggekeerd . BESTAAT kan NULL evalueren , zodat die rijen kunnen worden geretourneerd . gelijkenissen BESTAAT en IN zowel ondersteuning gecorreleerde en niet- gecorreleerde subquery's , en beide kunnen produceren main vergelijkbare resultaten . Toen gecorreleerd , BESTAAT en IN overeenkomen met een hoofdquery veld om een subquery veld ( ex : main.id = subquery.id ) . De subquery evalueert rij per rij , voor elke wedstrijd gevonden . In dit geval , IN en EXISTS zal dezelfde rijen op basis van vergelijkbare id wedstrijden terug . Bij niet- gecorreleerde , BESTAAT en IN -proces hun subqueries eerst, dan wedstrijdresultaten naar de belangrijkste vraag . Prestaties van bestaat en IN optreden wordt bepaald door de database optimizer en het uitvoeringsplan zij in dienst voor de code uitgevoerd . Voor BESTAAT en IN , kan de optimizer kiezen verschillende wegen . In Oracle , dit is NIET BESTAAT vermijden van een anti - treden , en meestal blijkt sneller dan NIET IN . Uiteindelijk is wat trial and error nodig maatstaf de snelste weg afhankelijk van de database en het is versie gebruikt . Zorg ervoor dat de operator die de juiste resultaten eerste zorgt gebruiken , dan als allen hetzelfde , probeer vervanging bestaat en IN om echt te zien wat sneller is .
|