- Este tópico contém 5 respostas, 3 vozes e foi atualizado pela última vez 18 anos, 11 meses atrás por
mhlourenco.
-
AutorPosts
-
3 de julho de 2006 às 4:24 pm #75936
Tytto
ParticipanteTrabalho 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.
3 de julho de 2006 às 5:34 pm #75937Marcio68Almeida
ParticipanteCertamente 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.3 de julho de 2006 às 6:19 pm #75938Tytto
ParticipanteConsidero 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.
3 de julho de 2006 às 6:23 pm #75939Tytto
ParticipanteUso o sequinte hardware:
Processador P4 3.2 com 2GB de Ram
Disco de 170GB.3 de julho de 2006 às 8:02 pm #75941Marcio68Almeida
ParticipanteNã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…5 de julho de 2006 às 11:13 pm #75957mhlourenco
ParticipanteLeandro(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,
-
AutorPosts
- Você deve fazer login para responder a este tópico.