質問 |
||
| 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 |
|
| |
| この回答へのお礼 | とても分かりやすいご説明ありがとうございます。 すごくためになりました。 単純に速くなるとも限らないみたいですね!! 色々試行錯誤してやってみます。 ありがとうございました。 |