PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

paginação e filtragem em uma tabela muito grande no postgresql (paginação do conjunto de chaves?)


Aqui está como eu lido com isso. Para a primeira página que eu busco, eu uso
SELECT id, col, col, col 
  FROM output 
 ORDER BY id DESC
 LIMIT 10000

Então, no meu programa cliente (node.js) eu capturo o id valor da última linha do conjunto de resultados. Quando eu preciso da próxima página, eu faço isso.
 SELECT id, col, col, col
   FROM output
  WHERE id < my_captured_id_value
  ORDER BY id DESC

Isso explora o índice. E funciona corretamente mesmo se você tiver excluído algumas linhas da tabela.

A propósito, você provavelmente quer um índice descendente se sua primeira página de paginação tiver os maiores ids. CREATE UNIQUE INDEX index_id ON output USING btree (ID DESC) .

Dica profissional SELECT * é prejudicial ao desempenho em bancos de dados grandes. Sempre liste as colunas que você realmente precisa.