我有两个相同的查询。首先我使用 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
这两个查询之间有什么性能差异吗? 最好的方法是什么?
最佳答案
这两种方法很可能会提供更接近的性能,如果不相同的话。让查询规划器来完成肮脏的工作。 :)
问题是要在您的 SQL 中保持良好的可读性,因此在这种情况下您必须:
- 将过滤器表达式放在
WHERE
子句上; - 只将连接表达式放在
JOIN
上。也就是说,这里只有表之间的关系。
关于sql - where 和 join 有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44120884/