Consulta retorna muitas linhas, como tratar?

9 respostas
M

Caros, acredito que eu tenha procurado errado, mas não achei nada que esclarece minhas duvidas.

Tenho uma consulta que retornou mais de 10000 linhas, como devo tratalas para exibi-las?

9 Respostas

tnaires

Paginação :wink:

Tá usando o que na camada de persistência? JDBC, Hibernate…

M

JDBC, então eu usarei paginação sim, mas o fato dele retornar sei la 10mil linhas nao influencia na performance digo como devo fazer para melhorar isso.

luiz.portnoy

Depende do que quer fazer. É realmente necessário trazer as 10 mil linhas? Se sim, pesquise sobre LazyLoad. Se não, reveja sua query. Teste no banco primeiro se for o caso.

Espero ter ajudado.

luistiagos

Não entendi… em que sentido vc quer melhorar isto? o tempo que demora para trazer estas 10mil linhas?
se for isto qual o sgbd que esta usando?
quanto tempo demora sua consulta?
poste sua query ai…

E

Se sua consulta vai sofrer paginação, não recomendo fazer uma única consulta.
Poderia trazer uma count das linhas e depois trabalhar com quantidades menores de dados para a paginação.
Não sei se era nisso que estava pensando?

tnaires

Não, pois usando paginação você não trará 10000 registros de uma vez. Se você definir que a página tem 50 registros, você só trará os primeiros 50 e cada vez que o usuário clicar em um número de página você recuperará os 50 registros correspondentes àquela página.

Passos:

  1. Faça um COUNT para saber o total de registros
  2. Defina o tamanho da página. Ex: 50 registros por página
  3. Calcule quantas páginas serão necessárias, dividindo o total pela quantidade de registros. Ex: 10000 / 50 = 200 páginas
  4. Se o usuário clicar:
  • na página 1, você deverá trazer os registros de número (1 - 1) * 50 + 1 = 1 até o 50
  • na página 2, você deverá trazer os registros de número (2 - 1) * 50 + 1 = 51 até o 100
  • na página 45, você deverá trazer os registros de número (45 - 1) * 50 + 1 = 2201 até o 2250
    Fórmula geral: (número da página - 1) * registros por página + 1
M

A consulta esta meio estranha, estou disposto a opiniões pois estou aprendendo.

"SELECT TimeStamp, S.StatusDescription as FinalStatus, PortID, Node, N11, " 
							
"DestAddr, SrcAddr, Request ,Response , CallDuration, " 
							
"M.MessageTypeDescription as MessageType, F.MessageFormatDescription as MessageFormat, " 
							
"TerminalID,ProcessingCode, MessageType, modem FROM LoggingRecords L" 
							
"INNER JOIN StatusTypes S ON L.FinalStatus = S.StatusCode"  
							
"INNER JOIN MessageType M ON L.MessageType = M.MessageTypeCode" 
							
"INNER JOIN MessageFormats F ON L.MessageFormat = F.MessageFormatCode" 
							
"where L.TimeStamp >=? and L.TimeStamp <=?"

Com o retorno, eu vou gerar um relatorio em jsp, que vai mostrar de 30 em 30 linhas, o que estou pensando em fazer é, criar uma lista com um objeto populado com cada linha?

Estou errado?

Muito obrigado pela ajuda galera

tnaires

Se você trouxer os 10000 registros, criar um objeto pra cada um e colocar em uma lista, vai ficar mais lento do que já está.
Você precisa consultar os registros de 30 em 30. Tente entender as linhas guia que passei no último post - adapte os exemplos para 30 registros por página.

M

Sim! Ja estou fazendo aqui, valeu mesmo cara!

Criado 31 de agosto de 2010
Ultima resposta 31 de ago. de 2010
Respostas 9
Participantes 5