Montar SELECT

Forum sobre SQL.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Montar SELECT

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Montar SELECT

Mensagem 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...
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Poka
Usuário Nível 4
Usuário Nível 4
Mensagens: 563
Registrado em: 25 Out 2004 21:26
Localização: Leme/SP

Montar SELECT

Mensagem 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
Anexos
browsePg.rar
(669.95 KiB) Baixado 75 vezes
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Montar SELECT

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Montar SELECT

Mensagem por alxsts »

[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Montar SELECT

Mensagem 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.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Responder