我重构了我们从另一家公司继承来的应用程序的缓慢部分,以使用内部联接而不是子查询,例如:
WHERE id IN (SELECT id FROM ...)
重构查询的运行速度提高了约100倍。(约50秒,约0.3秒),我期望有所改善,但是谁能解释为什么如此剧烈?where子句中使用的列均已建立索引。SQL是否在where子句中每行执行一次查询?
更新 -说明结果:
区别在于“(())中的id”查询的第二部分-
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