Refatorei uma seção lenta de um aplicativo que herdamos de outra empresa para usar uma junção interna em vez de uma subconsulta como:
WHERE id IN (SELECT id FROM ...)
A consulta refatorada é executada 100x mais rápido. (~ 50 segundos para ~ 0,3) Eu esperava uma melhoria, mas alguém pode explicar por que foi tão drástico? As colunas usadas na cláusula where foram todas indexadas. O SQL executa a consulta na cláusula where uma vez por linha ou algo assim?
Atualização - Explique os resultados:
A diferença está na segunda parte da consulta "where id in ()" -
2 DEPENDENT SUBQUERY submission_tags ref st_tag_id st_tag_id 4 const 2966 Using where
vs 1 linha indexada com a junção:
SIMPLE s eq_ref PRIMARY PRIMARY 4 newsladder_production.st.submission_id 1 Using index