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

postgresqlの非常に大きなテーブルでのページ付けとフィルタリング(キーセットページ付け?)

    これが私がこれを処理する方法です。フェッチする最初のページには、

    を使用します。
    SELECT id, col, col, col 
      FROM output 
     ORDER BY id DESC
     LIMIT 10000
    

    次に、クライアントプログラム(node.js)でidをキャプチャします 結果セットの最後の行の値。次のページが必要なときは、これを行います。

     SELECT id, col, col, col
       FROM output
      WHERE id < my_captured_id_value
      ORDER BY id DESC
    

    これはインデックスを悪用します。また、テーブルからいくつかの行を削除した場合でも、正しく機能します。

    ちなみに、最初のページ付けページのIDが最大の場合は、降順のインデックスが必要になる可能性があります。 CREATE UNIQUE INDEX index_id ON output USING btree (ID DESC)

    プロのヒント SELECT * 大規模なデータベースのパフォーマンスに悪影響を及ぼします。実際に必要な列を常にリストしてください。



    1. mysqlクエリでの距離計算

    2. エラーの取得-ORA-01858:数字が予期されていた場所に数字以外の文字が見つかりました

    3. ロールベースのアクセス制御のDBスキーマ

    4. SQLite MAX