忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2024/11/22 13:29 |
OracleでLIMIT句

Oracleにlimitが存在しないというのは有名な話です。
おかげでページングなどが必要なアプリに対し、Oracleは恐ろしく使いにくいDBになってしまっています。

MySQLであれば
    SELECT * FROM table ORDER BY id DESC LIMIT 100,10
と簡単に書くことができますが、同じことをOracleで行おうとすると、
    SELECT * FROM ( SELECT * FROM table ORDER BY id DESC ) WHERE ROWNUM BETWEEN 100 AND 110
と副問い合わせを使わざるを得ません。

さてここで疑問なのですが、この副問い合わせ、一旦テーブルtableの全件を並べ替え、その中から該当の行を取り出してきています。
これって相当パフォーマンスがアレなんじゃないのと。
http://www.oracle.co.jp/forum/thread.jspa?threadID=2001064
やはりよろしくないようです。

実際の検索方法としては副問い合わせ以外にも分析関数、相関サブクエリによる検索方法というものがありました。
http://oraclesqlpuzzle.hp.infoseek.co.jp/10-3.html
相関サブクエリは、前から110件だけは並べ替えるけど、それ以降は全部111位とみなすことで並べ替えを行わず、それによって検索速度を上げるという手法だそうです。

まあ早くなるのはいいんですが、たかが並べ替えたいだけのためにこんな面倒なSQLを書かないといけないってどうなんだ。

WebアプリにはやはりMySQL一択ですな。
まあMySQLにもインデックス張ると遅くなるとか面白現象もあるみたいですが。

 

PR


2010/05/03 21:01 | Comments(0) | TrackBack() | PHP

トラックバック

トラックバックURL:

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<==NOVEL PHILOSOMA== 13 | HOME | 買ったものリスト 2010/05/02>>
忍者ブログ[PR]