Subqueries vs joins

26 浏览
0 Comments

Subqueries vs joins

我重构了一个我们从另一个公司继承的应用程序中的一个较慢部分,使用了内连接而不是类似于子查询的方式:

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

admin 更改状态以发布 2023年5月24日
0
0 Comments

你正在为每一行运行子查询,而连接是在索引上发生的。

0
0 Comments

一个“相关子查询”(即其中where条件取决于从包含查询的行中获取的值)将为每一行执行一次。非相关子查询(其中where条件独立于包含查询)将在开始时执行一次。 SQL引擎会自动区分这一区别。

但是,是的,解释计划将为您提供有关详细信息。

0