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
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
我想它不會在所有的事情,你調用任何一種方式都表。
都沒有。
SELECT
A.COL_A1, B.COL_B1
FROM TABLE1 A
INNER JOIN TABLE2 B ON A.COL_A1 = B.COL_B1
如果您詢問性能(您沒有),然後測試您的特定平臺。
這取決於我們正在討論的數據庫系統。在許多RDBMS中,有一些查詢優化 - 所以如何構建您的查詢可能不是服務器處理它的方式......
例如,有一個查詢優化器將執行一個執行計劃;通常它是正確的,但你可以help it along the way。
大多數其他主要數據庫都有類似的東西......所以在您的示例中,您的兩個示例都可能以相同的方式進行處理。
不應該有任何區別,因爲優化程序可能會將其中一個語句轉換爲另一個語句。但一如既往地確保:運行兩種測試,根據您使用的數據庫可能會有細微的差異
就像你在後面描述的鏈接,它取決於在哪個表中設置唯一的索引(可能特別適用於IBM DB)。你的答案是幫助頁面您鏈接:)
reagards
SQL是declarative所以你告訴優化你想要什麼,不怎麼做到這一點。
他們是相同的,因爲它是基於數學理論,不是爲了執行
。然而,花費者的答案是正確的,因爲這是ANSI-92使用JOIN,而不是舊的「過濾笛卡爾」您發佈。
爲什麼你在閱讀有關SQL Server的WebSphere文檔?你真的必須努力工作才能避免找到一篇SQL Server文章。
索引(在本文中)對SQL Server中的結果沒有影響,隻影響性能和使用的執行計劃。對於SQL Server,索引與JOIN/WHERE命令分開考慮(無關緊要,當然這是聲明式的)。如果在WebSphere改變了它的計劃基礎上JOIN命令則坦言這是比我想象的(我有客戶使用我的數據庫從WebSphere ......)
我建議更多的狗屎......
SELECT COL_A1
FROM TABLE1 A
WHERE EXISTS (SELECT *
FROM TABLE2 B
WHERE A.COL_A1 = B.COL_B1);
因爲我更喜歡子查詢的意見。
但它會表現更好......? (請參閱評論意見) – onedaywhen 2010-07-09 12:45:22
可能,但不可能。如果查詢優化器認爲合適,它將重寫該子查詢作爲連接,如果不是,則按照它的原則評估它。它可以節省您擔心使用什麼樣的連接(請參閱原始問題的支持者評論)。 – 2010-07-09 13:35:25
只有當您不希望TABLE2的輸出爲 – gbn 2010-07-10 07:49:21
更好地以什麼方式? – Oded 2010-07-09 11:34:54
什麼數據庫?桌子是什麼樣的?表中有什麼樣的數據?那些字段是什麼數據類型?無法回答沒有**很多**你的部分更多的信息! – 2010-07-09 11:39:17
顯然表現。 – Venom 2010-07-09 11:39:27