2009-07-04 26 views
3

以下のクエリの速度と結果には疑問があります。誰か私に彼らの説明を教えてもらえますか? (これらのクエリは、Oracleデータベース用に書かれた)SELECT MAX(col_name)とROWNUM = 1の間のパフォーマンス

私はテーブルテーブル1(ID、itemID、trnx_date、バランス、...)を持っているとしましょう。私はアイテムの最新のバランスを取得したい。

クエリ1:

IDは=(TABLE1からMAX(ID)を選択アイテムID = をITEM_ID)TABLE1 FROM

SELECTバランス。

クエリ2:

アイテムIDは、 AND ROWNUM ID DESC BY = 1 ORDERをITEM_ID = TABLE1 FROM SELECTバランス。 のitem_idが可変である

したがって、これらの2つのクエリで同じ結果が得られますか?どちらが速いのですか、それより高速なクエリがありますか? Oracleで

おかげ

答えて

2

Rownum(私のミスは、以前、私は少しでOracleを使用していない)ソート前に計算されます。したがって、このクエリは最初と同一である:この場合

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

、IDのインデックスが与えられると、このことは、若干高速であってもよいです。

なぜあなたはそれらをベンチマークするためにあなた自身を実行していませんか?

+0

お返事ありがとうございますが、わかっているようにselect文の処理順序はFROM、WHERE、ORDER BY、SELECTです。したがって、条件が見つかった場合、レコードの検索を停止し(ROWNUM = 1のため)、結果をソートするので、結果は同じになりません。私は別のテーブルのデータをテストし、結果は異なっています! –

関連する問題