sql >> データベース >  >> RDS >> Oracle

oracleより高速なページングクエリ

    現在、実際にOracleを利用できるわけではありませんが、ページングに最適なSQLクエリは確かに次のとおりです

    select *
    from (
            select rownum as rn, a.*
            from (
                    select *
                    from my_table
                    order by ....a_unique_criteria...
                ) a
        )
    where rownum <= :size
        and rn >  (:page-1)*:size
    

    http://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197.html

    一貫したページングを実現するため 一意の基準を使用して行を並べ替える必要があります 、そうすることで、ページXに対して、ページYに対して既にロードした行(!=X)をロードすることを回避できます。

    編集:

    1)一意の基準を使用して行を並べ替えるということは、クエリを実行するたびに各行が同じ位置を維持するようにデータを並べ替えることを意味します

    2)ORDER BY句で使用されるすべての式を含むインデックスは、特に最初のページで結果をより速く取得するのに役立ちます。そのインデックスを使用すると、オプティマイザによって選択された実行プランは、自然な順序でインデックスをスクロールする行を返すため、行を並べ替える必要はありません。

    3)ちなみに、クエリの結果をページングする最も速い方法は、クエリを1回だけ実行し、アプリケーション側からのすべてのフローを処理することです。



    1. 私のお気に入りのPostgreSQLクエリとその重要性

    2. クエリプラン全体のパフォーマンスチューニング

    3. 日付はOracleにどのように保存されますか?

    4. MySQL挿入クエリはWHERE句では機能しません