Yos*_*mit 2 sql join predicate inner-join where-clause
这里有一个类似的问题,但我的疑问略有不同:
select *
from process a inner join subprocess b on a.id=b.id and a.field=true
and b.field=true
Run Code Online (Sandbox Code Playgroud)
那么,在使用 时inner join,哪个操作先出现:连接还是a.field=true条件?
由于这两个表非常大,我的目标是process首先过滤表,然后仅连接用 table 过滤的行subprocess。
哪种方法是最好的?
首先要做的事情是:
哪个操作先出现: join 或 a.field=true 条件?
您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
Run Code Online (Sandbox Code Playgroud)
这将有效地执行与原始查询相同的操作,但 SQL 程序员普遍认为它更具可读性。优化器可以根据需要重新排列INNER JOIN和谓词。WHERE