我有两个相同的查询。首先,我使用Where
SELECT dings.id, doorbots.id
FROM dings
INNER JOIN doorbots ON dings.doorbot_id = doorbots.id
WHERE doorbots.id = 1615131 AND
deleted_at is NULL
ORDER BY dings.created_at;
第二,我将所有过滤器都放在join
SELECT dings.id, doorbots.id
FROM dings
INNER JOIN doorbots ON dings.doorbot_id = doorbots.id AND
doorbots.id = 1615131 AND
deleted_at is NULL
ORDER BY dings.created_at;
我有一个综合索引:doorbot_id_idx btree (doorbot_id) WHERE deleted_at IS NULL
这两个查询之间有任何性能差异吗? 什么是最好的方法?
答案 0 :(得分:1)
对于INNER JOIN
,替代方案是等效的,任何体面的SQL引擎都会以最有效的方式执行它。无论你怎么写它。
我个人更喜欢在ON
子句中只添加ID比较,而进一步的过滤器会进入WHERE
子句。
答案 1 :(得分:1)
如果不是相同的话,这两种方法很可能会提供更接近的表现。让查询规划器执行脏任务。 :)
问题是在SQL中保持良好的可读性,所以在这种情况下你必须:
WHERE
子句; JOIN
加入表达式。也就是说,只有表之间的关系就在这里。