2015-02-24 53 views
2

我想加入幾個表,但要過濾來自'A'表的特定類型。哪個更好的查詢來自以下兩個查詢(有沒有更好的方法?)還是沒有查詢優化器的差異原因?SQL加入具有過濾條件的查詢:性能

當過濾條件被在給定的「WHERE子句:

SELECT .. FROM A a JOIN B b ON a.id=b.id JOIN C c on a.id = c.id...<other joins>...WHERE a.col='SOME_VAL'; 

過濾條件被內給出「ON」:

SELECT .. FROM A a JOIN B b ON a.id=b.id AND a.col='SOME_VAL' JOIN C c on a.id = c.id...<other joins> 

回答

1

隨着內部聯接沒有造成的性能差異,這你可以使用EXPLAIN來檢查(你的查詢的兩種形式都應該產生相同的計劃)。

使用WHERE子句的好處通常是可讀性。與多行佈局結合使用時。 (我強烈建議不要保留你所有的SQL作爲一個長行。)

SELECT 
    stuff 
FROM 
    foo 
INNER JOIN 
    bar 
    ON (join predicates here) 
WHERE 
    (static filters here) 

變得更容易閱讀的原因(和維護)是連接謂詞現在明確只描述表之間的關係。該查詢仍然正確運行沒有WHERE子句,但返回一個更大的集合。