Я рефакторил медленный раздел приложения, которое мы унаследовали от другой компании, чтобы использовать внутреннее соединение вместо подзапроса, подобного
where id in (select id from ... )
Реорганизованный запрос выполняется примерно в 100 раз быстрее. (от ~ 50 секунд до ~ 0,3) Я ожидал улучшения, но кто-нибудь может объяснить, почему он был таким радикальным? Все столбцы, использованные в предложении where, были проиндексированы. SQL выполняет запрос в предложении where один раз за строку или что-то в этом роде?
Обновление - Объяснить результаты:
Разница во второй части запроса "where id in ()" -
2 DEPENDENT SUBQUERY submission_tags ref st_tag_id st_tag_id 4 const 2966 Using where
против 1 индексированной строки с объединением:
SIMPLE s eq_ref PRIMARY PRIMARY 4 newsladder_production.st.submission_id 1 Using index