Dúvida sobre desempenho - Join/Where/(+)???

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
Avatar do usuário
Porva
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 342
Registrado em: Seg, 29 Jan 2007 7:36 am
Localização: São Paulo/SP

pessoal, comecei a trabalhar com Oracle a quase 1 mês, e me disseram aqui no trabalho que não já a necessidade de se usar o comando JOIN pois "aumenta a complexidade de visualização do código" e que o hardware pra rodar o banco dá conta tranquilo etc etc, que o ganho de desempenho é insignificante pra ser usar JOIN ao invés de fazer as comparações diretamente na cláusula WHERE, eu trabalhei praticamente 3 anos com Firebird e nesse BD, a diferença de desempenho entre JOIN (LEFT JOIN, etc) e comparações no WHERE era GRITANTE!!, no Oracle existe algum otimizador que resolva esse problema pra que realmente não seja necessário o uso do JOIN?, como é isso no Oracle

porque eu sinceramente me acostumei usar JOIN mesmo, acho até que a Select fica até mais 'profissional'.

enfim, qual a opinião de vocês?

valeu
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Bem. "LEFT JOIN", "RIGHT JOIN" em oracle funciona, mas o padrão é usar o sinal de IGUAL pra joins e (+) pra OUTER-JOINS. Que eu saiba, é a mesma coisa usar o sinal de IGUAL ou os nomes JOIN, etc... No fundo , será feito a mesma coisa pelo otimizador.

Mesmo assim, se alguém tiver uma DEMONSTRAÇÃO disso, seria interessante!
KeenOnOracle
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 16
Registrado em: Qui, 16 Ago 2007 9:05 am
Localização: são caetano do sul - SP
Keen On Oracle - DBA

o melhor teste para você seria usar um plano de execucao para saber qual select esta tendo um custo maior e gerar uma saida como essa:

Selecionar tudo

set autotrace traceonly

SQL> SET AUTOTRACE TRACEONLY
SQL> select * from unidades where descricao like '%METRO%';


Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=ALL_ROWS (Cost=3 Card=1 Bytes=24)
   1    0   TABLE ACCESS (FULL) OF 'UNIDADES' (TABLE) (Cost=3 Card=1 B
          ytes=24)





Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
          8  consistent gets
          0  physical reads
          0  redo size
        876  bytes sent via SQL*Net to client
        504  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          3  rows processed
Faça isso e vejo o caminho de acesso aos dados.....

Espero ter ajudado...

Cheers
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 7 visitantes