sql >> Database teknologi >  >> RDS >> Mysql

Underforespørgsler med EXISTS vs IN - MySQL

En Forklar plan ville have vist dig, hvorfor netop du skulle bruge Exists . Normalt kommer spørgsmålet Exists vs Count(*) . Eksisterer er hurtigere. Hvorfor?

  • Med hensyn til udfordringer præsenteret af NULL:når underforespørgsel returnerer Null , for IN bliver hele forespørgslen Null . Så det skal du også klare. Men ved at bruge Exist , det er blot en falsk . Meget nemmere at klare. Simpelthen IN kan ikke sammenligne noget med Null men Eksisterer kan.

  • for eksempel. Eksisterer (Vælg * fra din tabel, hvor bla ='blabla'); du får sand/falsk i det øjeblik, et hit er fundet/matchet .

  • I dette tilfælde IN tager på en måde positionen for Count(*) for at vælge ALLE matchende rækker baseret på WHERE fordi det sammenligner alle værdier.

Men glem heller ikke dette:

  • FINDER udføres med høj hastighed mod IN :når underforespørgselsresultaterne er meget store.
  • IN kommer foran EXISTS :når underforespørgselsresultaterne er meget små.

Reference til for flere detaljer:



  1. ORA-00604 ORA-12705

  2. Sådan beregnes det gennemsnitlige salg pr. dag i MySQL

  3. 5 måder at kontrollere, om der findes en tabel i MySQL

  4. Opret en DML Trigger i SQL Server