讓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
或者他們等同?
讓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
或者他們等同?
它們等同於所有4
主要的數據庫系統:Oracle
,SQL Server
,MySQL
,PostgreSQL
。
使用JOIN
語法(更準確地說,使用STRAIGHT_JOIN
而不是JOIN
)將有助於執行您在MySQL
中所需的連接順序。
看到這個答案的詳細信息:
它也通常被認爲是更清潔和可讀性使用JOIN
語法。
儘管我生長在Oracle
代碼樣本,它們通常使用WHERE
語法。
從我的理解,他們都是一樣的。理論上,我認爲INNER JOIN可以通過引擎進行優化,因爲A,B的默認行爲是笛卡爾連接。話雖如此,我現在正在處理一個體面大小的表格,並且兩者在SQL Server 2005中給出了相同的查詢時間,所以我的猜測是引擎足夠聰明,可以選擇它。
乾杯,
埃裏克
它們是等價的。但第二種形式是首選語法。
我同意其他答案,表現明智的兩個語句在主要系統上是等價的,但我也會指出第二個語句從代碼可讀性的角度來看更可取。我也會說,指定列列表而不是使用星號會提高性能和可讀性。