2009-07-04 34 views
3

我懷疑以下查詢的速度和結果。任何人都可以給我解釋他們嗎? (這些查詢爲Oracle數據庫編寫)SELECT MAX(col_name)和ROWNUM = 1之間的性能

假設我有一個表table1(ID,itemID,trnx_date,balance,...)。我想獲得一個項目的最新餘額。

查詢1:

SELECT平衡FROM表1 WHERE ID =(SELECT從表1 MAX(ID)WHERE ITEMID = ITEM_ID);

問題2:

SELECT平衡FROM表1 WHERE ITEMID = ITEM_ID AND ROWNUM = 1 ORDER BY ID DESC;

其中ITEM_ID是變量。

因此,這兩個查詢是否給出了相同的結果?哪一個更快?還是有其他查詢比他們更快?

感謝

回答

2

Rownum在甲骨文排序之前計算(我的錯誤較早,我沒有一點使用的Oracle)。所以,這個查詢是等同於第一:

SELECT 
    balance 
FROM 
    (SELECT balance FROM table1 WHERE itemID = *item_id* ORDER BY ID DESC) 
WHERE 
    rownum = 1; 

在這種情況下,給定的ID的索引,這可能是略微更快

你爲什麼不直接運行它們來測試它們呢?

+0

感謝Eric的回答,但據我所知,select語句的進程順序是FROM,WHERE,ORDER BY,SELECT。因此,當發現條件時,它會停止查找記錄(因爲ROWNUM = 1),然後對結果進行排序,所以結果將不會相同。我測試了另一個表數據,結果是不同的! – 2009-07-04 03:14:36