Ir para conteúdo
Fórum Script Brasil
  • 0

Problema Paginação Postgre com Offset


TeraHertz

Pergunta

Pessoal sou novato no postgre, meu problema é o seguinte:

Tenho uma tabela com 45+ milhões de registros, usando as cláusulas LIMIT e OFFSET posso paginar até uns 150.000 registros sem uma perda de performance.

Porém acima disso (falta muiiitoo para chegar nos 45+ milhões) é impraticável....

Como soluciono isso ? procedures ? cursores ? functions ?

Gostaria da opinião de vocês já pesquisei muito porém todos os exemplos de paginação que encontrei utilizam LIMIT e OFFSET... o pessoal que souber outras formas deêm uma mão e também deixem um exemplo de como fazer, pois sou novato.

OBS: a tabela já possui indice, pelo que pesquisei utilizando OFFSET a consulta fica lenta por causa que simplesmente ela percorre todos os registros 0...m e só mostra apartir do OFFSET passado, precisaria algo como percorrer somente apartir do offset passado ai sim não teria problemas.

AGUARDO AJUDA !!!

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

O mais simples é tentar restringir ao máximo o conjunto com uma condição no WHERE. A alternativa não é trivial. Uma solução é criar uma coluna de inteiros com a ordenação desejada e quando for consultar usar esta coluna na cláusula WHERE:

create table t (id int, name text, ordem_name int unique);

insert into t (id, name) values
(1, 'fulano'),(2, 'sicrano'),(3, 'beltrano')
;

update t
set ordem_name = s.ordem
from (
    select id, row_number() over(order by name) as ordem
    from t
) s
where t.id = s.id
;

select * from t;
 id |   name   | ordem_name 
----+----------+------------
  1 | fulano   |          2
  2 | sicrano  |          3
  3 | beltrano |          1
(3 rows)
Agora use a cláusula where para fazer o OFFSET e o LIMIT
select *
from t
where ordem_name >= 2 and ordem_name < 2 + 2
;
 id |  name   | ordem_name 
----+---------+------------
  1 | fulano  |          2
  2 | sicrano |          3
(2 rows)

O update deverá ser feito regularmente, por exemplo a cada 3 horas. Se for necessário manter sempre atualizado então a coluna ordem_name deve ser uma função.

Editado por Kakao
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...