Refactoré una sección lenta de una aplicación que heredamos de otra compañía para usar una combinación interna en lugar de una subconsulta como:
WHERE id IN (SELECT id FROM ...)
La consulta refactorizada se ejecuta aproximadamente 100 veces más rápido. (~ 50 segundos a ~ 0.3) Esperaba una mejora, pero ¿alguien puede explicar por qué fue tan drástico? Las columnas utilizadas en la cláusula where fueron indexadas. ¿SQL ejecuta la consulta en la cláusula where una vez por fila o algo así?
Actualización - Explicar los resultados:
La diferencia está en la segunda parte de la consulta "where id in ()":
2 DEPENDENT SUBQUERY submission_tags ref st_tag_id st_tag_id 4 const 2966 Using where
vs 1 fila indexada con la unión:
SIMPLE s eq_ref PRIMARY PRIMARY 4 newsladder_production.st.submission_id 1 Using index