Pregunta

i) entre estos dos cuál es más eficiente:

Select A.* from A, B where A.b_id = B.id

o

Select A.* from A where A.b_id in (select id from B);

ii) ¿Cómo es Select A.* from A where A.b_id in (select id from B); ¿realmente funcionan? ¿Se traduce internamente en algo como Select A.* from A, B where A.b_id = B.id o es (select id from B) evaluado para cada fila de A?

¿Fue útil?

Otros consejos

Este es más eficiente:

Select A.* from A, B where A.b_id = B.id

Sí, Select A.* from A where A.b_id in (select id from B) obras.

Y no, (select id from B) no se evalúa para cada fila. Se evalúa solo una vez.

Normalmente, las uniones son más rápidas que usar el IN operador.

No estoy seguro de dónde provienen ese tipo de uniones falsas, pero deberías unirte a las tablas usando ON, ni una masa de dónde está al final.

SELECT A.*
FROM A
INNER JOIN B ON (A.b_id = B.id)

Depende de varios factores, incluida la versión MySQL, el tamaño de las tablas, la existencia de índices, etc.

Deberías intentar ejecutar EXPLAIN ..., o incluso mejor si se apoya, EXPLAIN EXTENDED ... seguido por SHOW WARNIGS; para tratar de entender lo que está haciendo MySQL.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top