2010-07-06 51 views
6

這個查詢需要大約一分鐘給結果:這個簡單的SQL查詢應該如此緩慢嗎?

SELECT MAX(d.docket_id), MAX(cus.docket_id) FROM docket d, Cashup_Sessions cus 

然而,這一個:

SELECT MAX(d.docket_id) FROM docket d UNION MAX(cus.docket_id) FROM Cashup_Sessions cus 

賦予其結果瞬間。我看不出第一個人做了什麼,會花更長的時間 - 我的意思是他們都只是檢查相同的兩個最大的數字列表並返回它們。還有什麼可以做的,我看不到?

我正在通過Java在MS Access數據庫上使用jet SQL。

+0

'在MS Access上噴射SQL'< - 我的眼睛!護目鏡!他們什麼都不做! – 2010-07-06 12:38:24

+0

我猜你的意思是說這架飛機技術有點不足。正如你可以告訴我,我是一個初學者在黑暗中自我教導 - 如果你能對這個評論稍微詳細一點,我將不勝感激,因爲它可以幫助我理解我正在從事的任務的重要性/完整性。 – Jack 2010-07-06 23:10:11

回答

13

第一個是在兩個表之間進行交叉連接,而第二個不是。
這就是它的全部。

+0

好的。所以逗號意味着交叉連接。感謝所有花時間指出的人。現在將花更多的時間用於「開始的sql」書籍。 – Jack 2010-07-06 23:06:07

+0

逗號意味着一個連接,它只是一個交叉連接,因爲沒有where子句來連接這些表。 – airmanx86 2010-07-07 00:02:07

9

第一個使用笛卡爾積來形成源數據,這意味着第一個表中的每一行都與第二個表中的每一行配對。之後,它搜索源以找出列中的最大值。

第二個不連接表。它只是從第一個表格中找到最大值,並從第二個表格中找到最大值,然後返回兩行。

3

第一個查詢在獲取最大值之前進行表間交叉連接,這意味着一個表中的每條記錄都與另一個表中的每條記錄連接。

如果您有兩個包含1000個項目的表格,您將得到一個包含1000000個項目的結果以查找最大值。