ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.3987613 ROWNUMについて
質問者:smiyamoto777 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
困り度:
  • すぐに回答を!
質問投稿日時:
08/04/30 16:27
この質問に対する回答は締め切られました。

回答良回答20pt

ANo.1 rownumはselectをした際に割り振りされる仮想列です。
ですので、Where句として指定してもrownum単体の条件では索引は使われません。ですので指定したからといって単純に速くなることはありません。

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

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

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

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

気をつける必要があるのは、selectした順に振られるということは、Order byで並び順を指定しないと結果が異なってしまいます。
回答者:3rd_001
種類:アドバイス
どんな人:経験者
自信:参考意見
回答日時:
08/05/01 11:58
この回答へのお礼とても分かりやすいご説明ありがとうございます。
すごくためになりました。
単純に速くなるとも限らないみたいですね!!
色々試行錯誤してやってみます。
ありがとうございました。