Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

A cláusula MySQL IN executa a subconsulta várias vezes?


Sua suposição é falsa; a subconsulta será executada apenas uma vez. A razão pela qual é mais lento que uma junção é porque IN não pode tirar proveito dos índices; ele tem que varrer seus argumentos uma vez para cada vez que WHERE cláusula é avaliada, ou seja, uma vez por linha na tabelaA. Você pode otimizar a consulta, sem usar variáveis ​​ou procedimentos armazenados, simplesmente substituindo o IN com uma junção, assim:
SELECT tableA.field1, tableA.field2, [...]
FROM tableA 
  INNER JOIN tableB ON tableA.id = tableB.id

A menos que você não se importe em retornar todos os campos de ambas as tabelas, você precisa enumerar os campos que deseja no SELECT cláusula; tableA.* , por exemplo, provocará um erro de sintaxe.