Ordem da tabelas em joins na Query

Tuning de Banco, Tuning de SQL, Ferramentas de tuning
Responder
dejambo
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 68
Registrado em: Qua, 27 Jun 2012 8:58 am

Boa Tarde Pessoal.

Tenho uma dúvida em relação a ordem das tabelas utilizando joins. O ordem influência a performance? Por exemplo, se eu escrever:

Selecionar tudo

select * from bigtable b 
                             inner join smalltable s on (b.id = s.id)


...a consulta acima será mais custosa em relação a consulta abaixo:

Selecionar tudo

select * from smalltable b 
                             inner join bigtable s on (b.id = s.id)


?
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

Antigamente, até o Oracle 8, o padrão do otimizador era por REGRA. (RBO - Rule Based Optimization)
Ou seja, a ordem das tabelas e da cláusula WHERE faziam diferença no plano de execução.

Mas a partir do 9, o Oracle adotou o otimizador por CUSTO (CBO - Cost Based optimization). Neste caso, ele busca uma série de estatísticas para índices, conteúdo das tabelas, histogramas, etc. E com isso, ele consegue montar um plano de execução, independente da ordem que eles estão no SQL.

Então: não faz diferença a ordem.
Avatar do usuário
fbifabio
Moderador
Moderador
Mensagens: 199
Registrado em: Ter, 22 Fev 2011 1:51 pm
Localização: São Paulo - SP
Contato:
Fábio Prado
www.fabioprado.net

Como complemento, informo que além da ordem das tabelas no join, outra coisa que não influencia é a ordem das colunas na cláusula WHERE. Para mais informações sugiro acessar o post http://www.fabioprado.net/2014/10/a-ord ... where.html.
Responder
  • Informação
  • Quem está online

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