こちらの記事の続きです。
今回は2つの行番号の振り方を実際に試して、
使い分けの指標が分かればいいなという内容です。
処理速度を比較してみた
同じように行番号を振るように、
ROWNUM版、ROW_NUMBER版でそれぞれSQLを用意し、
単純に実行してみて処理速度を比較してみます。
検索用のデータとして、
Oracleインストール時に用意されているサンプルDBにテーブルを作成し、
A5M2のテストデータ作成機能で適当なデータを100万件用意しました。
(適当な人名でテストデータを作ることも出来るんですね、ビックリです。)
まずはROWNUM版から。
画像のSQLを実行してみます。
ROW_NUMBERに行番号の振り方を合わせて、
TEST_NAME昇順で行番号を振り全件取得しています。
(同名でテストデータが作られちゃいました、より厳密な結果はご自身でお試しください。)
10回実行した結果、4.599~5.462秒で取得できて平均5.020秒でした。
次はROW_NUMBER版です。
画像のSQLを実行してみます。
ROWNUM版と同様に行番号を振って全行取得しています。
10回実行した結果、4.811~5.787秒で取得できて平均5.522秒でした。
実行結果
今回は平均処理速度が0.502秒差でROWNUM版の方が速い結果となりました。
ちなみに1000万件データでも試してみましたが2秒弱差でROWNUM版が速かったです。
SQLの見た目はごちゃっとしていますが、動きは良いようです。
ROWNUMとROW_NUMBERの使い分け
ここまでの内容から2つの使い分けに答えを出してみます。
ROWNUM
・少しでも処理速度を速めたい時
・複雑なSQLで使うと難読化やバグ発生のリスクがある
ROW_NUMBER
・なるだけ読みやすいSQLにしたい時
・膨大なデータの取得では比較的処理時間がかかる
こうしてみると基本はROW_NUMBERを使用して、
どうしても速度が気になる場合はROWNUMで書いてみるのが良さそうです。
他にも考慮できる点はあるかもしれません。
もし見つかったら続編としてまとめようと思います。