Pular para o conteúdo
Visualizando 6 posts - 1 até 6 (de 6 do total)
  • Autor
    Posts
  • #75936
    Tytto
    Participante

      Trabalho com Delphi 2006 + Oracle 9.
      Tenho uma aplicação que usa vários selects com Joins.
      No Oracle, fica muito lento, sendo que já verifiquei os conceitos de otimização do comando SQL (do tipo select TabelaMenor Join TabelaMaior) e naum tem jeito.

      O mesmo select, para bancos SQL e Interbase funciona 3 vezes mais rápido (as tabelas tem o mesmo numero de registros em ambos os bancos).

      Existem algumas configurações no Oracle que trata especificamente de otimização de joins? Ou existe alguma outra configuração que possa estar “empacando” o meu banco?

      Na verdade, o Oracle e bem mais lento que o MS SQL. Mas qdo se trata de Joins, ele fica absurdamente mais lento.

      Obrigado pela sua atençao e ajuda.

      Leandro.

      #75937
      Marcio68Almeida
      Participante

        Certamente há algo muito errado por ai, pois o Oracle é muito mais rápido, principalmente em grandes bases de dados…
        Para que as consultas estejam tão degradasdas, ou há um problema na instalação (hardware, sistema operacional, swap em disco, memória, etc) ou na administração do banco (índices, tipos de dados, formas de consulta, etc)
        O ideal é que você consulte o teu DBA para que te ajude a identificar onde está o problema, que não precisa ser exatamente na consulta.
        Você também pode usar uma ferramenta chamada Oracle SQL Developer que tem a opção Explain e te mostra como o processo está sendo executado.

        #75938
        Tytto
        Participante

          Considero e muito o seu comentário já que Oracle é a sua área, e naum a minha. Voçe é o primeiro que me disse que o Oracle é mais rápido que SQL, por exemplo.

          Vou te dar um exemplo, pra ver se voce pode me ajudar:

          Tabela1: ESMATERI (com 50 campos e 15.000 registros).
          Tabela2: USER_MAT (com 2 campos e 200 registros).

          SQL usado:

          SELECT USER_MAT.SEQUENCIA,
          USER_MAT.CD_MATERIAL,
          ESMATERI.DESCRICAO
          FROM USER_MAT
          INNER JOIN ESMATERI ON (USER_MAT.CD_MATERIAL = ESMATERI.CD_MATERIAL)
          ORDER BY USER_MAT.SEQUENCIA.

          OBS: Existem os indices:
          ESMATERI(CD_MATERIAL, DESCRICAO) onde CD_MATERIAL é a chave.
          USER_MAT (SEQUENCIA, CD_MATERIAL) que é a chave.

          Obrigado por sua atenção.

          #75939
          Tytto
          Participante

            Uso o sequinte hardware:

            Processador P4 3.2 com 2GB de Ram
            Disco de 170GB.

            #75941
            Marcio68Almeida
            Participante

              Não são tabelas grandes, e com os índices e consulta informados, não tem por que a resposta não ser imediata.
              Meu conselho que e você utilize o TKPROF para analisar o que há de errado…

              #75957
              mhlourenco
              Participante

                Leandro(Tytto):

                Pelo select montado, não existe nada de errado com ele. O que vc poderia ver é como vc configurou o seu Banco Oracle, e de que forma vc tb configurou a tabela na criação da mesma, pois isso tb pode influenciar e muito na questão resposta. Vc já verificou isso? Pois já trabalhei com diferentes bancos de dados, e o Oracle é o mais rápido.

                Um grande abraço,

              Visualizando 6 posts - 1 até 6 (de 6 do total)
              • Você deve fazer login para responder a este tópico.
              plugins premium WordPress