我重构了我们从另一家公司继承的应用程序的慢速部分,以使用内部联接而不是子查询,例如:
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
vs 1 个带有连接的索引行:
SIMPLE s eq_ref PRIMARY PRIMARY 4 newsladder_production.st.submission_id 1 Using index