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.