我有許多表格,大約四個,我希望加入到一起。爲了使我的代碼更加清晰易讀(對我),我希望加入一下子,然後在年底進行過濾:加入多個表格:在哪裏進行有效過濾
SELECT f1, f2, ..., fn
FROM t1 INNER JOIN t2 ON t1.field = t2.field
INNER JOIN t3 ON t2.field = t3.field
INNER JOIN t4 ON t3.field = t4.field
WHERE // filters here
但我懷疑,將在子查詢中每個表和篩選在每個範圍將使性能更好。
SELECT f1, f2, ..., fn
FROM (SELECT t1_f1, t1_f2, ..., t1_fi FROM t1 WHERE // filter here) AS a
INNER JOIN
(SELECT t2_f1, t2_f2, ..., t2_fj FROM t2 WHERE // filter here) AS b
ON // and so on
請提醒哪些會導致更好的性能和/或如果我的預感是正確的。我願意爲了可讀性而犧牲性能。
如果每個子查詢確實濾波將更加有效率,它的數據庫平臺的架構將使任何區別,或者這是對所有RDBMS SQL口味也是如此?
我使用的是SQL Server和Postgres的。
編寫可讀代碼,優化器應該處理過濾順序。 – jarlh
你也可以直接使用過濾條件進入連接條件:'FROM t1 JOIN t2 ON t1.field = t2.field AND t2.column3> 42'。但是,所有三種選擇最有可能產生相同的執行計劃。但驗證這一點的唯一方法是查看執行計劃(在兩個產品中) –
對於PosgresSQL或MySQL使用EXPLAIN來獲取有關如何執行查詢的更多信息。 SQL Server具有顯示執行計劃的圖形工具。要從執行計劃輸出中優化SQL start –