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

La clausola MySQL IN esegue la sottoquery più volte?

La tua ipotesi è falsa; la sottoquery verrà eseguita una sola volta. Il motivo per cui è più lento di un join è perché IN non può sfruttare gli indici; deve scansionare i suoi argomenti una volta per ogni volta che si trova WHERE La clausola viene valutata, ovvero una volta per riga nella tabellaA. Puoi ottimizzare la query, senza utilizzare variabili o stored procedure, semplicemente sostituendo il IN con un join, quindi:

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

A meno che non ti dispiaccia recuperare tutti i campi di entrambe le tabelle, devi enumerare i campi che desideri in SELECT clausola; tableA.* , ad esempio, genererà un errore di sintassi.