我試圖了解我在 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
謝謝!
uj5u.com熱心網友回復:
通常,對于標準內部連接,是的,這兩種方式在語意上是相同的。
這兩個查詢是否具有相同的性能取決于查詢規劃器對它們執行的操作。在您的特定情況下,我希望它們以相同的方式執行,但唯一可以確定的方法是使用EXPLAINto view the query plan。
uj5u.com熱心網友回復:
第一個選項包含 3 個選擇和 1 個連接,另一方面,第二個選項 - 2 個選擇和 1 個連接。我想這就是答案
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/535759.html
標籤:postgresql表现
上一篇:如何檢查我在DatabricksPyspark中的表的一組值中是否有兩個值
下一篇:MySQL性能-交叉連接與左連接
