sql >> Database >  >> RDS >> Mysql

Subquery's met EXISTS vs IN - MySQL

Een Explain Plan zou je hebben laten zien waarom je precies Exists . zou moeten gebruiken . Meestal komt de vraag Exists vs Count(*) . Exists is sneller. Waarom?

  • Met betrekking tot uitdagingen aanwezig door NULL:wanneer subquery Null retourneert , voor IN wordt de hele zoekopdracht Null . Daar moet je dus ook mee om kunnen gaan. Maar met Exist , het is slechts een false . Veel gemakkelijker om mee om te gaan. Gewoon IN kan niets vergelijken met Null maar Exists kan.

  • bijv. Exists (Select * from yourtable where bla = 'blabla'); je krijgt waar/onwaar op het moment dat één treffer is gevonden/overeenkomt .

  • In dit geval IN neemt min of meer de positie in van de Count(*) om ALLE te selecteren overeenkomende rijen op basis van de WHERE omdat het alle waarden vergelijkt.

Maar vergeet dit ook niet:

  • EXISTS voert met hoge snelheid uit tegen IN :wanneer de resultaten van de subquery erg groot zijn.
  • IN loopt voor op EXISTS :wanneer de resultaten van de subquery erg klein zijn.

Verwijzing naar voor meer details:



  1. Time-out voor instructies instellen voor het uitvoeren van query's?

  2. Records zoeken met NULL in een kolom

  3. Kan ik meerdere cursors op één verbinding gebruiken met pyodbc en MS SQL Server?

  4. Hoe kolom met beperking te laten vallen?