postgresql 在Postgres中,在连接之前过滤两个表在性能上是否等同于先连接两个表,然后再过滤?

yizd12fk  于 2022-11-23  发布在  PostgreSQL
关注(0)|答案(2)|浏览(108)

我试图了解我在postgres中编写查询的方式是否在规模上不具性能(因为我使用视图来组织DRY代码)。
我认为这可以归结为在连接表之前过滤表是否等同于先连接表,然后过滤。
下面是一个例子:有人能告诉我选项1和选项2在非常大的表上的性能是否相同吗?
方案1

with filteredTable1 as 
    (select *
    from table1
    where table1.id = 1),
   filteredtTable2 as
   (select *
    from table2
    where table2.id = 1) 
select * 
from filteredTable1
inner join filteredTable2 filteredTable1.id = filteredTable2.id

备选办法2

with joinedTables as
    (select *
     from table1
     inner join table2 on table1.id = table2.id)
select *
from joinedTables
where id1 = 1

谢谢你!

yftpprvb

yftpprvb1#

通常,使用标准内部连接时,这两种方式在语义上是相同的。
这两个查询是否具有相同的性能取决于查询计划器如何处理它们。在您的特定情况下,我 * 希望 * 它们以相同的方式执行,但唯一确定的方法是use EXPLAIN to view the query plan

t40tm48m

t40tm48m2#

第一个选项是3个选择和1个连接,而第二个选项是2个选择和1个连接。我认为这就是答案

相关问题