【问题标题】:Postgresql inner join or subqueryPostgresql 内连接或子查询
【发布时间】:2021-08-30 11:49:59
【问题描述】:

在性能方面,比较这两个查询,哪一个应该更高效?

select d.list_name, d.date_created,d.price
p.name, p.stock_quantity  
from price_list d inner join product p on d.product_id = p.product_id;

select d.list_name, d.date_created,d.price,
       (select p.name from product p where p.product_id = d.product_id ),
       (select p.stock_quantity from product p where p.product_id = d.product_id )
from price_list d;

我认为连接会很不方便,每个表都有大约 10M 的记录,但经过几次测试,我发现第二个选项的性能更好。这可能吗?

【问题讨论】:

  • 注意:您的第二个查询中缺少,
  • 如果它正在发生,那么它一定是可能的。如果您想了解更多信息,请查看这两个查询的 EXPLAIN ANALYZE 计划,如果您仍有疑问,请告诉我们。
  • 好吧,是的,我会看一下解释分析,但实际上它更像是一个一般性问题。有人告诉我,内部连接不是最佳的,当我有机会时,我应该尽量避免它们,但我正在重新考虑这一点。我不认为(在子查询上)一遍又一遍地访问同一个表可以比内部连接更好。

标签: sql postgresql performance query-optimization


【解决方案1】:

这些查询做不同的事情。

INNER JOIN可以:

  • 在没有匹配项时过滤行。
  • 当有多个匹配时产生多行。

您应该实际使用符合您预期的版本。

如果您的数据是结构化的,结果是相同的,那么我预计性能会非常相似。特别是,您希望在所有表中都对 product_id 建立索引。

但是,始终值得对系统上的数据运行查询并比较执行计划。

【讨论】:

  • 是的,实际上两个查询的结果是一样的。
猜你喜欢
  • 1970-01-01
  • 2014-02-07
  • 2016-03-28
  • 2021-02-10
  • 1970-01-01
  • 2023-03-02
  • 1970-01-01
  • 2012-12-09
  • 2021-05-13
相关资源
最近更新 更多