PostgreSQL 左连接选择 VS 普通选择

PostgreSQL 左连接选择 VS 普通选择

我想知道哪个更快 - 将几个选择合并为一个连接选择还是实际上进行单独的选择更快?

我正在执行一项任务,该任务有许多相互关联的表(目前为 4 个,但可能会增加),我通过 LEFT JOIN 选择它们。对 postgresql 执行此类 sql 查询是否能解决问题?

从你的经历来看,你有什么看法:)

答案1

答案是“这取决于你的数据库”,但通常JOIN最好将查询写成这样,因为它更容易阅读,并为查询规划器提供一些关于你正在做什么的提示/

您应该让 Postgres 对EXPLAINEXPLAIN ANALYZE的查询执行查询计划,看看是否存在实质性差异 - 同时您可能还会发现一些可以优化的其他内容,例如索引。请参阅Postgres 手册有关使用 的更多信息EXPLAIN

答案2

一般来说,准备每个查询和检索数据都需要成本。对于小型数据集,循环执行 SELECT 并不算太糟,但如果您在包含 1000 行的表上执行 SELECT,然后对其中的每一行在另一个包含 1000 行的表上执行另一个 SELECT,差异将非常明显,即使循环选择是从预先准备的查询中执行的。

即使循环中准备每个查询的成本为零,JOINed 元素也可能会减少检索到的数据的总大小。例如,如果您将 1000 行的表与只有一行匹配的表连接起来,则查询的 JOIN 版本将返回一行,而单独的 SELECT 将从第一个表中返回 1000 行,循环将产生 999 个空集和 1 行。

如果您从每个表中请求一个特定项目,而不是循环遍历一组行,那么一个“大”查询和 4 个小查询之间的差异可能微不足道。正如 voretaq7 所说,让 postgresql 解释每个查询将执行的操作以及执行该操作需要多长时间,将在很大程度上确定将发生什么。

相关内容