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

Eksekverer MySQL IN-sætningen underforespørgslen flere gange?

Din antagelse er falsk; underforespørgslen vil kun blive udført én gang. Grunden til at det er langsommere end en join er fordi IN kan ikke drage fordel af indekser; den skal scanne sine argumenter én gang for hver gang WHERE klausul evalueres, det vil sige én gang pr. række i tabel A. Du kan optimere forespørgslen uden at bruge variabler eller lagrede procedurer, blot ved at erstatte IN med et join, således:

SELECT tableA.field1, tableA.field2, [...]
FROM tableA 
  INNER JOIN tableB ON tableA.id = tableB.id

Medmindre du ikke har noget imod at få alle felter tilbage fra begge tabeller, er du nødt til at opregne de felter, du ønsker i SELECT klausul; tableA.* vil f.eks. fremkalde en syntaksfejl.



  1. Konverter escaped Unicode-tegn tilbage til faktiske tegn i PostgreSQL

  2. Vælg (hent) alle poster fra flere skemaer ved hjælp af Postgres

  3. Erlang Mysql:Sådan forhindrer du SQL-injektioner

  4. Migrering af nogle objekter fra en database til en anden