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
  

Mensagemem Qui, 09 Ago 2007 5:43 pm

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
Porva
Localização: São Paulo/SP

Mensagemem Qui, 09 Ago 2007 5:52 pm

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!
dr_gori
Localização: Portland, OR USA

Thomas F. G

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

Mensagemem Qui, 16 Ago 2007 9:48 am

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:

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
KeenOnOracle
Localização: sao caetano do sul - SP

Keen On Oracle - DBA


  • Veja também
    Respostas
    ExibiÇões
    Última mensagem


      Voltar para SQL

      Quem está online

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