[firebase-br] RES: Resultado com INNER JOIN x LEFT JOIN

Eduardo Jedliczka (TeamFB) jedyfb em gmail.com
Ter Jun 27 14:24:26 -03 2006


Sql server possui muitos problemas. Ele muitas vezes tem sintaxe confusa e 
comportamentos não condizentes como o padrão ANSI, parece que ele tenta se 
identificar muito com o ACCESS (para facilitar a migração do usuário 
doméstico ou pequena empresa).

Fora do Brasil, nenhum desenvolvedor sério considera o MS SQL Server para 
missão crítica. Eles optam pelo IBM DB/2 ou pelo Oracle.

Mas quanto ao Otimizador do FireBird, na MAIORIA das vezes não há diferenças 
de performance entre colocar no Inner/Left Join ou no Where.

======================
Eduardo Jedliczka
Membro do TeamFB - FireBase
Apucarana - PR
======================

----- Original Message ----- 
From: "Marcelo Durães da Silva" <marceloduraes em terra.com.br>
To: "'FireBase'" <lista em firebase.com.br>
Sent: Monday, June 26, 2006 8:33 PM
Subject: [firebase-br] RES: Resultado com INNER JOIN x LEFT JOIN


Mas por incrivel que pareça no SQL Server o resultado usando LEFT JOIN é
mais lento do que usando combinação carteziana no where.

Essa informação eu colhi em uma Aula de SQL server na POS graduação de .NET
na UVV no Espírito Santo.


Marcelo Durães da Silva
Geo Terra - Tecnologia de Informação Ltda
Elpis Informática Ltda






-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Jeferson Oliveira
Enviada em: quinta-feira, 22 de junho de 2006 10:23
Para: FireBase
Assunto: Re: [firebase-br] Resultado com INNER JOIN x LEFT JOIN

Marcos,

Ao indicar um join com Left será realiza, para cada valor da tabela à
esquerda, uma pesquisa na tabela que está à direita e, portanto, somente à
tabela à direita precisa ser indexada. O que explica a utilização do índice
TBTIPOMOVIMENTOSAIDA_PK no segundo caso.
Inner e Right join, fazem o oposto: para cada valor da direita é feita uma
pesquisa na tabela à esquerda.
Já o índice TBMOVESTOQUE_DATAPRODUTO só foi utilizado devido ás condições
definidas na claúsula WHERE.

Ese comportamento é geral, e não específico do seu banco de dados.
Abaixo a sentença que utilizei para confirmar essa afirmação:

select Detalhe.RDB$CONSTRAINT_NAME as NomeFK,
       idxDetalhe.RDB$FIELD_NAME as CampoDetalhe from
RDB$RELATION_CONSTRAINTS Detalhe left join RDB$INDEX_SEGMENTS idxDetalhe
    on (idxDetalhe.RDB$INDEX_NAME = Detalhe.RDB$INDEX_NAME)

Abraço!
Jeferson Oliveira
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br Para
editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa


______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço 
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa 





Mais detalhes sobre a lista de discussão lista