【发布时间】: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