Aprenda PL/SQL

Ordem da tabelas em joins na Query

Tuning de Banco, Tuning de SQL, Ferramentas de tuning
  

Mensagemem Seg, 09 Mai 2016 5:49 pm

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:

Código: Selecionar todos
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:

Código: Selecionar todos
select * from smalltable b
                             inner join bigtable s on (b.id = s.id)


?
dejambo

Mensagemem Ter, 10 Mai 2016 1:04 pm

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.
dr_gori
Localização: Porto Alegre - RS

Thomas F. G
https://www.patreon.com/glufke

Mensagemem Sex, 30 Jun 2017 4:01 pm

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-ordem-dos-campos-na-clausula-where.html.
fbifabio
Localização: São Paulo - SP

Fábio Prado
www.fabioprado.net



Voltar para DBA Tuning

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante