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