我试图了解我在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
谢谢你!
2条答案
按热度按时间yftpprvb1#
通常,使用标准内部连接时,这两种方式在语义上是相同的。
这两个查询是否具有相同的性能取决于查询计划器如何处理它们。在您的特定情况下,我 * 希望 * 它们以相同的方式执行,但唯一确定的方法是use
EXPLAIN
to view the query plan。t40tm48m2#
第一个选项是3个选择和1个连接,而第二个选项是2个选择和1个连接。我认为这就是答案