sql - where 和 join 有区别吗?

标签 sql postgresql

我有两个相同的查询。首先我使用 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/

相关文章:

postgresql - 在 plpgsql 中插入时使用 quote_literal

sql - 加快SQL查询速度

java - 如何使用 SQLite ID 自动增量?

postgresql - heroku Postgres 错误 - 运算符不存在没有时区的时间戳=整数

PostgreSQL 将 SERIAL 列添加到现有表中,其值基于 ORDER BY

php - 关于序列的 postgresql nextval 问题

postgresql - PostgreSQL 8.0 中的 SSL 连接错误

c# - 重命名数据库并在显示数据库已存在错误中以旧名称创建数据库

Java - SQL 和线程 - 处理卡住

javascript - Sequelize : escape string in a literal string