Clipper On Line • Ver Tópico - Montar SELECT

Montar SELECT

Discussão sobre SQL

Moderador: Moderadores

 

Montar SELECT

Mensagempor JoséQuintas » 28 Set 2020 15:20

Aí que está....
Por exemplo... no browse padrão de pedidos, limito aos últimos 2.000

      :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, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18155
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Montar SELECT

Mensagempor alxsts » 28 Set 2020 20:27

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)
alxsts
Colaborador

Colaborador
 
Mensagens: 2945
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Montar SELECT

Mensagempor Poka » 06 Out 2020 10:57

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 59 vezes
Avatar de usuário

Poka
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 513
Data de registro: 25 Out 2004 21:26
Cidade/Estado: Leme/SP
Curtiu: 0 vez
Mens.Curtidas: 23 vezes

Montar SELECT

Mensagempor JoséQuintas » 06 Out 2020 15:28

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, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18155
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Montar SELECT

Mensagempor alxsts » 07 Out 2020 00:26

[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2945
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Montar SELECT

Mensagempor sygecom » 07 Out 2020 09:10

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
leonardodemachado@hotmail.com

Faça você também sua doação esse fórum é uma lenda viva: http://www.pctoledo.com.br/doacao
Avatar de usuário

sygecom
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 7018
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 133 vezes

Anterior



Retornar para SQL

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 7 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro