OracleでMySQLのLIMIT的なことをする。

Google Suggestでググッたら最初に出てきた情報が期待していたものじゃなかったから、
忘れないように欲しかった方の情報をメモc⌒っ゚д゚)っφ メモメモ...


ROW_NUMBER 分析ファンクションの使用例

SELECT NO, NAME FROM (
    SELECT NO, NAME,
      ROW_NUMBER() OVER (ORDER BY NO) RNUM
    FROM ROWNUM_TEST
) WHERE RNUM BETWEEN 5 AND 10

ようは、
・欲しいデータを取得するサブクエリを書く
・サブクエリをソートして結果に行番号をふるカラムを追加
・クエリで「WHERE RNUM a BETWEEN b」すれば、MySQLのLIMIT的な動作をしてくれる。


S2Daoとかフレームワーク側でやってくれるのもあるみたいなんだけど、
その類はすべての行を取ってきてから特定の行を持ってきてるのが多いようで。
(詳しくは調べてない)
1000件くらいならまだいいけど、10万件超えるとさすがにやってられんね。


Googleなんかはデータベースをオンメモリで動かしてるって話をどっかで聞いたな。
本当にそうなら、ぜひ弄ってみたい(;´Д`)ハァハァ
メモリ上あれば、10万件も検索早いだろうに。