首页 > 解决方案 > 如果第一组内部连接为空,则性能差异

问题描述

我必须使用我的数据库的 5 个表来获取数据,我写了一个这样的 SQL 查询:

SELECT *
FROM A 
INNER JOIN B ON A.id_b = B.id_b
INNER JOIN C ON B.id_c = C.id_c
INNER JOIN D ON D.id_d = C.id_d
INNER JOIN E ON E.id_e = D.id_e
WHERE A.column1 = somevalue

我选择的列对我的解释无关紧要,但我需要所有表的某些列来执行操作。

我想知道:如果集合 A 根据 WHERE 子句要求为空,它会在连续的内部连接上进行吗?

标签: sqlsql-serverinner-joinsqlperformance

解决方案


是的,不是的,也许。优化器很可能会选择以 开头的执行计划,因为您在子句A中有过滤条件。WHERE

然后,后续JOIN的 s 会非常快,因为 SQL 引擎不需要对JOIN空集做太多工作。

也就是说,不能保证优化器将从第一个表开始。因此,这确实是偶然的,但考虑到您的过滤条件,这是一个合理的预期。此外,后续JOIN的 s 将在执行计划中,但它们会很快,因为每个都有一个空集合。


推荐阅读