Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Unterabfragen mit EXISTS vs. IN - MySQL

Ein Explain Plan hätte Ihnen gezeigt, warum genau Sie Exists verwenden sollten . Normalerweise kommt die Frage Exists vs Count(*) . Exists ist schneller. Warum?

  • In Bezug auf Herausforderungen durch NULL:wenn subquery Null zurückgibt , für IN wird die gesamte Abfrage zu Null . Also musst du auch damit umgehen. Aber mit Exist , es ist lediglich ein false . Viel einfacher zu bewältigen. Einfach IN kann nichts mit Null vergleichen aber Exists kann.

  • z.B. Exists (Select * from yourtable where bla = 'blabla'); Sie erhalten wahr/falsch in dem Moment, in dem ein Treffer gefunden/zugeordnet wird .

  • In diesem Fall IN nimmt quasi die Position des Count(*) ein um ALLE auszuwählen übereinstimmende Zeilen basierend auf WHERE weil es alle Werte vergleicht.

Aber vergiss auch das nicht:

  • EXISTS wird mit hoher Geschwindigkeit gegen IN ausgeführt :wenn die Ergebnisse der Unterabfrage sehr groß sind.
  • IN geht vor EXISTS :wenn die Ergebnisse der Unterabfrage sehr klein sind.

Weitere Informationen finden Sie unter: