2009-04-27 99 views
1

讓A和B成爲數據庫模式中的兩個表。 A和B通過多對一的關係相關。每個A存在許多B,而B有一個外鍵列a_id。這兩個表都有一個主鍵列ID。以下哪種方法對大表有更好的性能?

以下兩個查詢中的哪一個對A和B中的大數據集執行更好?

SELECT A.* FROM A,B WHERE A.id = B.a_id 

SELECT A.* FROM A INNER JOIN B ON A.id = B.a_id 

或者他們等同?

回答

5

它們等同於所有4主要的數據庫系統:OracleSQL ServerMySQLPostgreSQL

使用JOIN語法(更準確地說,使用STRAIGHT_JOIN而不是JOIN)將有助於執行您在MySQL中所需的連接順序。

看到這個答案的詳細信息:

它也通常被認爲是更清潔和可讀性使用JOIN語法。

儘管我生長在Oracle代碼樣本,它們通常使用WHERE語法。

0

從我的理解,他們都是一樣的。理論上,我認爲INNER JOIN可以通過引擎進行優化,因爲A,B的默認行爲是笛卡爾連接。話雖如此,我現在正在處理一個體面大小的表格,並且兩者在SQL Server 2005中給出了相同的查詢時間,所以我的猜測是引擎足夠聰明,可以選擇它。

乾杯,
埃裏克

0

它們是等價的。但第二種形式是首選語法。

1

我同意其他答案,表現明智的兩個語句在主要系統上是等價的,但我也會指出第二個語句從代碼可讀性的角度來看更可取。我也會說,指定列列表而不是使用星號會提高性能和可讀性。