sql >> Database >  >> RDS >> Mysql

MYSQL - Verschil tussen IN en EXIST

BESTAAT

EXISTS is letterlijk bedoeld om te controleren op het bestaan ​​van gespecificeerde criteria. In de huidige standaard SQL kun je meer dan één vergelijkingscriterium specificeren - IE als je wilt weten wanneer col_a en col_b beide overeenkomen - wat het iets sterker maakt dan de IN-clausule. MySQL IN ondersteunt tupels, maar de syntaxis is niet overdraagbaar, dus EXISTS is een betere keuze voor zowel leesbaarheid als draagbaarheid.

Het andere ding om op te letten met EXISTS is hoe het werkt - EXISTS retourneert een boolean en retourneert een boolean bij de eerste match. Dus als je te maken hebt met duplicaten/veelvouden, is EXISTS sneller uit te voeren dan IN of JOIN's, afhankelijk van de gegevens en de behoeften.

IN

IN is syntactische suiker voor OR-clausules. Hoewel het erg meegaand is, zijn er problemen met het omgaan met veel waarden voor die vergelijking (ten noorden van 1.000).

NIET

De NOT-operator draait de logica gewoon om.

Subquery's versus JOIN's

De mantra "gebruik altijd joins" is gebrekkig, omdat JOIN's het risico lopen de resultatenset op te blazen als er meer dan één onderliggende record is tegen een ouder. Ja, je kunt DISTINCT of GROUP BY gebruiken om dit aan te pakken, maar het is zeer waarschijnlijk dat dit het prestatievoordeel van het gebruik van een JOIN-moot maakt. Ken uw gegevens en wat u wilt voor een resultatenset - deze zijn de sleutel tot het schrijven van SQL die goed presteert.

Om nogmaals te herhalen dat u weet wanneer en waarom u moet weten wat u moet gebruiken:LEFT JOIN IS NULL is de snelste uitsluitingslijst op MySQL als de vergeleken kolommen NIET nullable zijn , anders zijn NOT IN/NOT EXISTS betere keuzes.

Referentie:



  1. Hoe het gemiddelde van de 'middelste' waarden in een groep te krijgen?

  2. Is er een verschil tussen deze twee vragen?

  3. Mariadb docker-container Kan geen verbinding maken met MySQL-server op host (111 Verbinding geweigerd) met Python

  4. nodejs express/routes en mysql