アプリ版:「スタンプのみでお礼する」機能のリリースについて

OracleでROWNUMを使用すると処理速度はアップするのでしょうか?

(例)TESTテーブル(PK:KOJIN_NO)には、10万件
(1)ROWNUM 使用
SELECT
KOJIN_NO, SHIMEI
FROM
TEST
WHERE
KBN = 1
ROWNUM < 101

(2)ROWNUM 未使用
SELECT
KOJIN_NO, SHIMEI
FROM
TEST
WHERE
KBN = 1

この場合、(1)と(2)ではやっぱり(1)の方が処理速度は速いのでしょうか?

実際、試したところROWNUMを使用したSQLの方が遅い気がしました。
SQL初心者なので、詳しく分かりません。
お願い致しますm(__)m

A 回答 (1件)

rownumはselectをした際に割り振りされる仮想列です。


ですので、Where句として指定してもrownum単体の条件では索引は使われません。ですので指定したからといって単純に速くなることはありません。

しかし、Web等で1~100件、101件から200件というようにクエリから
返ってくる件数を制限するような用途では効果があります。

何万件ものデータを取得してから100件を表示するのと、
データを100件だけ取得して表示するのでは大きな違いです。

つまり、取得件数を制限することで、転送・メモリを節約する用途では効果があるということです。

あとは、単に連番が振りたいだけとか。

気をつける必要があるのは、selectした順に振られるということは、Order byで並び順を指定しないと結果が異なってしまいます。
    • good
    • 0
この回答へのお礼

とても分かりやすいご説明ありがとうございます。
すごくためになりました。
単純に速くなるとも限らないみたいですね!!
色々試行錯誤してやってみます。
ありがとうございました。

お礼日時:2008/05/01 14:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す