sql >> Base de Datos >  >> RDS >> Mysql

¿La cláusula MySQL IN ejecuta la subconsulta varias veces?

Tu suposición es falsa; la subconsulta se ejecutará una sola vez. La razón por la que es más lento que una unión es porque IN no puede aprovechar los índices; tiene que escanear sus argumentos una vez por cada vez que WHERE se evalúa la cláusula, es decir, una vez por fila en la tabla A. Puede optimizar la consulta, sin usar variables o procedimientos almacenados, simplemente reemplazando el IN con una combinación, por lo tanto:

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

A menos que no le importe recuperar todos los campos de ambas tablas, debe enumerar los campos que desea en SELECT cláusula; tableA.* , por ejemplo, provocará un error de sintaxis.