Página 2 de 2

Montar SELECT

Enviado: 28 Set 2020 15:20
por JoséQuintas
Aí que está....
Por exemplo... no browse padrão de pedidos, limito aos últimos 2.000

Código: Selecionar todos

      :cSQL := "SELECT IDPEDIDO, PDDATEMI, LPAD( PDCADASTRO, 6, '0' ) AS ZEROCADASTRO, " + ;
         " LEFT( JPCADASTRO.CDNOME, 30 ) AS NOME, LEFT( JPTRANSACAO.TRNOME, 12 ) AS TRANSACAO, " + ;
         " PDVALNOT, PDCONF, PDSTATUS, LPAD( JPNOTFIS.NFNOTFIS, 9, '0' ) AS ZERONOTFIS, Right( JPNOTFIS.NFFILIAL, 2 ) AS FILIAL " + ;
         " FROM JPPEDIDO " + ;
         " LEFT JOIN JPCADASTRO ON JPCADASTRO.IDCADASTRO = JPPEDIDO.PDCADASTRO" + ;
         " LEFT JOIN JPNOTFIS ON JPNOTFIS.NFPEDIDO = JPPEDIDO.IDPEDIDO " + ;
         " LEFT JOIN JPTRANSACAO ON JPTRANSACAO.IDTRANSACAO = JPPEDIDO.PDTRANSACAO " + ;
         " WHERE 1=1 " + cFiltro + ;
         " ORDER BY IDPEDIDO DESC LIMIT 2000"
Isso dá menos de 1 segundo.
Consultou, chegou, acabou, a partir daí é instantâneo, porque tá tudo local.

É menos de 1 segundo entre teclar ENTER e estar com o browse pronto.
Durante a navegação NÃO HÁ acesso a servidor, por isso é instantâneo.

Quando eu usava DBF temporário.... isso demorava quase 1 minuto, só por causa da montagem do DBF LOCAL.

Montar SELECT

Enviado: 28 Set 2020 20:27
por alxsts
Olá!

Vejam este artigo: Correct Use of MySQL LIMIT OFFSET Clauses: Limiting and Paginating

Isto pode ser usado para carregar o array do browse. Durante a navegação, tratar no evento ChangeRowCol do browse o momento em que o usuário passa do fim do array (dá seta para baixo ou PgDn que causem movimento do ponteiro para além do limite do array). Neste momento reexecutar a consulta com novo offset. É uma ideia...

Montar SELECT

Enviado: 06 Out 2020 10:57
por Poka
Bom dia

Gilberto Silvério escreveu
Em teste, a pesquisa de 100 itens demora em torno de 1,65 segundos, o problema e esse, vc vai descendo no browse, trava, ai de repente dispara, tenho certeza que a Veiarada vai reclamar, pq antes não travava... kkkkkk
fiz um exemplo veja se dá pra ajudar a ideia.
uso firebird, odbc , harbour , minigui extend

testei com 300.000 registros ficou rápido. meu computador é bem ruinzinho.


Poka

Montar SELECT

Enviado: 06 Out 2020 15:28
por JoséQuintas
alxsts escreveu:Neste momento reexecutar a consulta com novo offset. É uma ideia...
Esquisito, porque ao usar o LIMIT, o servidor costuma registrar como consulta lenta.
Isso porque ele precisa fazer toda consulta, pra saber que posição vai precisar.
Não entendi aonde o OFFSET ajuda nisso, já que seria parecido.

A primeira consulta ok, mas as próximas vão ter esse inconveniente.
Principalmente a última: vai ser muito registro pesquisado pra pouco resultado.
É onde ele acusa que precisa otimizar as pesquisas.

Digamos que seria igual fazer um LOCATE nos DBFs... quanto mais longe, mais demorado.
Com certeza continua sendo muito mais rápido do que DBF, mas em provedor que controla o uso do servidor, vém o alarme que mencionei, como se fosse pesquisa sem índice.

Montar SELECT

Enviado: 07 Out 2020 00:26
por alxsts

Montar SELECT

Enviado: 07 Out 2020 09:10
por sygecom
Zé,
A vantagem do OFFSET é que não precisa limitar aos 2000 registros, você pode deixar isso automatizado e paginado nos seus browse.