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にもインデックス張ると遅くなるとか面白現象もあるみたいですが。