1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Anuncie Aqui
    Anuncie aqui você Também: fdantas@4each.com.br

SQL + Progress

Discussão em 'Progress 4GL' iniciado por fernandofarah, Julho 21, 2015.

  1. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Sobre o Excel, o mais rápido que consegui é dessa forma:
    http://www.4each.com.br/threads/dica-avançada-exportação-ultra-rápida-para-excel.7214/

    já o SQL, basta digitar diretamente no editor:

    SELECT * FROM item.
    (Use . (ponto) e não ; (ponto e vírgula) porque no editor o caracter de finalização de linha é o ponto)

    Lembrando que é SQL92, que é bem diferente do SQL atual:
    Aqui tem algumas dicas:
    http://owen.sj.ca.us/~rk/howto/sql92.html
    e aqui:
    http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt

    Abraço

    Rafael
    fernandofarah curtiu isso.
  2. fernandofarah

    fernandofarah Membro Participativo

    Com essas instruções SQL no editor melhoram a performance de programas? Ao invés de for each poderia usar selects?
  3. fernandofarah

    fernandofarah Membro Participativo

    Qual seria "melhor" modo, for each (padrão) ou selects, ou possuem casos para um e para outro?
  4. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    eu acredito que o melhor é sempre os comandos nativos, porque imagina o seguinte, se vc está em progress e dá um comando SQL, o progress vai ter que traduzir esse sql para progress, executar o comando e depois mascarar o resultado no formato SQL pra te apresentar, é mais uma comodidade para quem não conhece progress e precisa fazer uma pesquisa do que uma facilidade PROGRAMATICA.
  5. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Concordo com o @bootstrapmaster , sempre melhor executar os comandos nativos.

    Para melhorar performance, existem algumas regras básicas que aprendi após muitos e muitos testes:
    1. Usar índice
    2. Se possível evitar BREAK BY e BY pois em alguns casos quebram o índice, em outros o conjunto de dados é muito grande
    e para o Progress ordenar tudo em memória demora muito e consome muitos recursos do sistema.
    3. Em bancos e tabelas em que você não pode adicionar/modificar índices, suas querys devem ser iguais ou estar muito próximo de algum índice.
    4. Evitar IF na Query (Preferível usar query dinâmica do que IF)
    5. Evitar usar > e <, use sempre = (igual) e <> (diferente). É preferível fazer um DO e dentro dele o FOR EACH com =, exemplo:
    Código:
    Errado:
      FOR EACH registros WHERE registros.data >= 01/01/2015 AND registros.data <= 31/12/2015 NO-LOCK.
      END.
    Correto:
      DO vData = 01/01/2015 TO 31/12/2015.
         FOR EACH registros WHERE registros.data = vData NO-LOCK.
         END.
      END.
    
    6. As querys devem ser sempre explícitas, ou seja, NUNCA faça uma coisa dessas:
    Código:
    Errado:
       FOR EACH registros WHERE NOT registros.deletado NO-LOCK.
       END.
    Certo:
       FOR EACH registros WHERE registros.deletado = FALSE NO-LOCK.
       END.
    
    Tem mais outras dicas, porém não me recordo no momento.

    Abraço

    Rafael
  6. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Uma outra dica é:
    Se quiser fazer deleção lógica, armazene os registros em outra tabela e exclua fisicamente da tabela de origem.

Compartilhe esta Página