有一个类似的问题here ,但我的疑问略有不同:
select *
from process a inner join subprocess b on a.id=b.id and a.field=true
and b.field=true
那么,当使用内连接
时,哪个操作先进行:连接还是a.field=true
条件?
由于这两个表非常大,我的目标是首先过滤表process
,然后仅连接使用表subprocess
过滤的行。
哪种方法是最好的?
最佳答案
首先要做的事情:
which operation comes first: the join or the a.field=true condition?
您的 INNER JOIN
包含此 (a.field=true
) 作为连接条件的一部分。因此它将阻止在 JOIN 过程中添加行。
RDBMS 的一部分是“查询优化器”,它通常会找到执行查询的最有效方法 - 无法保证 INNER JOIN 的评估顺序
条件。
最后,我建议您以这种方式重写您的查询:
SELECT *
FROM process AS a
INNER JOIN subprocess AS b ON a.id = b.id
WHERE a.field = true AND b.field = true
这将有效地执行与原始查询相同的操作,但 SQL 程序员普遍认为它更具可读性。优化器可以根据需要重新排列 INNER JOIN 和 WHERE 谓词。
关于sql - 在内连接条件之前过滤表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22263857/