2010-07-09 69 views
0

SQL中哪一個更好?SQL中哪一個更好?

SELECT A.COL_A1, B.COL_B1 FROM TABLE1 A, TABLE2 B 
WHERE A.COL_A1 = B.COL_B1 

或:

SELECT B.COL_B1, A.COL_A1 FROM TABLE2 B, TABLE1 A 
WHERE B.COL_B1 = A.COL_A1 

更多信息.. http://publib.boulder.ibm.com/infocenter/iisclzos/v9r1/index.jsp?topic=/com.ibm.websphere.ii.federation.classic.tuning.doc/tuning/iiyfctqcjoin.html

+0

更好地以什麼方式? – Oded 2010-07-09 11:34:54

+1

什麼數據庫?桌子是什麼樣的?表中有什麼樣的數據?那些字段是什麼數據類型?無法回答沒有**很多**你的部分更多的信息! – 2010-07-09 11:39:17

+0

顯然表現。 – Venom 2010-07-09 11:39:27

回答

1

我想它不會在所有的事情,你調用任何一種方式都表。

8

都沒有。

SELECT 
    A.COL_A1, B.COL_B1 
FROM TABLE1 A 
    INNER JOIN TABLE2 B ON A.COL_A1 = B.COL_B1 

如果您詢問性能(您沒有),然後測試您的特定平臺。

+1

他的代碼等價於你的內部連接,這不會產生任何影響 – 2010-07-09 11:42:50

+0

我無法想象玩弄列和連接的順序也可以。就可讀性而言,這是更好的(在我看來)。 – spender 2010-07-09 11:46:00

+2

@Tobias P:所有3個都是等效的,但自ANSI-92以來,這是*正確的*。 SQL當然是聲明式的,所以你告訴優化器你想要什麼,然後讓它把它整理出來。 – gbn 2010-07-09 11:51:14

1

這取決於我們正在討論的數據庫系統。在許多RDBMS中,有一些查詢優化 - 所以如何構建您的查詢可能不是服務器處理它的方式......

例如,有一個查詢優化器將執行一個執行計劃;通常它是正確的,但你可以help it along the way

大多數其他主要數據庫都有類似的東西......所以在您的示例中,您的兩個示例都可能以相同的方式進行處理。

3

不應該有任何區別,因爲優化程序可能會將其中一個語句轉換爲另一個語句。但一如既往地確保:運行兩種測試,根據您使用的數據庫可能會有細微的差異

0

就像你在後面描述的鏈接,它取決於在哪個表中設置唯一的索引(可能特別適用於IBM DB)。你的答案是幫助頁面您鏈接:)

reagards

1

SQL是declarative所以你告訴優化你想要什麼,不怎麼做到這一點。

他們是相同的,因爲它是基於數學理論,不是爲了執行

。然而,花費者的答案是正確的,因爲這是ANSI-92使用JOIN,而不是舊的「過濾笛卡爾」您發佈。

爲什麼你在閱讀有關SQL Server的WebSphere文檔?你真的必須努力工作才能避免找到一篇SQL Server文章。

索引(在本文中)對SQL Server中的結果沒有影響,隻影響性能和使用的執行計劃。對於SQL Server,索引與JOIN/WHERE命令分開考慮(無關緊要,當然這是聲明式的)。如果在WebSphere改變了它的計劃基礎上JOIN命令則坦言這是比我想象的(我有客戶使用我的數據庫從WebSphere ......)

0

我建議更多的狗屎......

SELECT COL_A1 
    FROM TABLE1 A 
    WHERE EXISTS (SELECT * 
         FROM TABLE2 B 
         WHERE A.COL_A1 = B.COL_B1); 

因爲我更喜歡子查詢的意見。

+0

但它會表現更好......? (請參閱評論意見) – onedaywhen 2010-07-09 12:45:22

+0

可能,但不可能。如果查詢優化器認爲合適,它將重寫該子查詢作爲連接,如果不是,則按照它的原則評估它。它可以節省您擔心使用什麼樣的連接(請參閱原始問題的支持者評論)。 – 2010-07-09 13:35:25

+0

只有當您不希望TABLE2的輸出爲 – gbn 2010-07-10 07:49:21