[firebase-br] Deveria mesmo usar um Natural?!

Francisco Thiago jeandeadlucky em yahoo.com.br
Ter Abr 26 13:37:38 -03 2005


Okay então!

Estava com medo de que o Natural fizesse com que a minha pesquisa durasse 
uma vida, mas se ele escolhe a tabela com o menor fetch... tdo bem intao!

Mas não deixa de ser intrigante :D

Obrigado!!

Francisco Thiago de Almeida
Enter&Plug Informática
Divisão: Desenvolvimento e Banco de dados
MSN: thiago em enterplug.com.br
Skype: enterplug_thiago


----- Original Message ----- 
From: "Carlos H. Cantu" <listas em warmboot.com.br>
To: "FireBase" <lista em firebase.com.br>
Sent: Tuesday, April 26, 2005 1:26 PM
Subject: Re: [firebase-br] Deveria mesmo usar um Natural?!


>O otimizador é um "bichinho" muito complexo. Geralmente o uso de LEFT
> JOINS muda bastante o plano de uma consulta. Além disso, a ordem dos
> joins pode interferir também, bem como a seletividade dos indices e
> vários outros fatores.
>
> Geralmente, quando o otimizador escolhe por fazer um "NATURAL" scan,
> ele opta pela tabela que resultará a menor quantidade de registros.
>
> Por sorte, a cada nova versão do FB, o otimizador vem ficando mais
> inteligente.
>
> []s
> Cantu
> http://www.warmboot.com.br
> FireBase - http://www.FireBase.com.br
>
> FT> Caros amigos,
>
> FT> Tenho a seguinte consulta abaixo, onde o relacionamento está sendo 
> feito
> FT> usando Constraints de Fk.
>
> FT> Quanto executo ela, o plano usado para a tabela de produtos é Natural 
> (com o
> FT> inner join) e nas demais, o FB usa o índice. Quando eu coloco o join 
> da
> FT> tabela de produtos para left join, ele usa o tal índice. Pq? Não 
> deveria ser
> FT> justamente o contrário?
>
> FT> Segue a consulta e o PLANo usado
>
> FT> select CAD_ESTOQUE.ESTO_CODIGO
> FT>      , CAD_ESTOQUE.ESTO_COD_BARRA
> FT>      , CAD_ESTOQUE.ESTO_MP
> FT>      , CAD_PRODUTOS.CPRO_DESCRICAO ||' '|| CAD_ESTOQUE.ESTO_DESCRICAO
> FT>      , CAD_ESTOQUE.ESTO_ADD1
> FT>      , CAD_ESTOQUE.ESTO_ADD2
> FT>      , CAD_ESTOQUE.ESTO_QTD
> FT>      , CAD_ESTOQUE.ESTO_QTDMIN
> FT>      , CAD_ESTOQUE.ESTO_RESERVADO
> FT>      , CAD_ESTOQUE.ESTO_ULTIMACOMPRA
> FT>      , CAD_ESTOQUE.ESTO_ULTIMAVENDA
> FT>      , CAD_ESTOQUE.ESTO_ATIVO
> FT>      , CAD_ESTOQUE.EMPR_CODIGO
> FT>      , CAD_ESTOQUE.CPRO_CODIGO
> FT>      , ESTO_PRECO_COMPRA
> FT>      , ADD1.ADD1_DESCRICAO
> FT>      , ADD2.ADD2_DESCRICAO
> FT>      , CAD_PRODUTOS.CPRO_FOTO_PATCH
> FT>      , CAD_PRODUTOS.CPRO_UNIDADE
> FT>      , CAD_PRODUTOS.CFOR_CODIGO
> FT>      , CAD_PRODUTOS.CGRP_CODIGO
> FT> from CAD_ESTOQUE
> FT>   inner join CAD_PRODUTOS on CAD_PRODUTOS.CPRO_CODIGO =
> FT> CAD_ESTOQUE.CPRO_CODIGO
> FT>   left join ADD1 on ADD1.ADD1_CODIGO = CAD_ESTOQUE.ESTO_ADD1
> FT>   left join ADD2 on ADD2.ADD2_CODIGO = CAD_ESTOQUE.ESTO_ADD2
>
> FT> Plano com inner join CAD_PRODUTOS on CAD_PRODUTOS.CPRO_CODIGO =
> FT> CAD_ESTOQUE.CPRO_CODIGO
>
> FT> Plan
> FT> PLAN JOIN (JOIN (JOIN (CAD_PRODUTOS NATURAL,CAD_ESTOQUE INDEX
> FT> (IDX_FK_ESTO_CPRO)),ADD1 INDEX (IDX_PK_ADD1_CODIGO)),ADD2 INDEX
> FT> (IDX_PK_ADD2_CODIGO))
>
> FT> Adapted Plan
> FT> PLAN JOIN (JOIN (JOIN (CAD_PRODUTOS NATURAL,CAD_ESTOQUE INDEX
> FT> (IDX_FK_ESTO_CPRO)),ADD1 INDEX (IDX_PK_ADD1_CODIGO)),ADD2 INDEX
> FT> (IDX_PK_ADD2_CODIGO))
>
>
> FT> Plano com  left join CAD_PRODUTOS on CAD_PRODUTOS.CPRO_CODIGO =
> FT> CAD_ESTOQUE.CPRO_CODIGO
>
> FT> Plan
> FT> PLAN JOIN (JOIN (JOIN (CAD_ESTOQUE NATURAL,CAD_PRODUTOS INDEX
> FT> (IDX_PK_CPRO)),ADD1 INDEX (IDX_PK_ADD1_CODIGO)),ADD2 INDEX
> FT> (IDX_PK_ADD2_CODIGO))
>
> FT> Adapted Plan
> FT> PLAN JOIN (JOIN (JOIN (CAD_ESTOQUE NATURAL,CAD_PRODUTOS INDEX
> FT> (IDX_PK_CPRO)),ADD1 INDEX (IDX_PK_ADD1_CODIGO)),ADD2 INDEX
> FT> (IDX_PK_ADD2_CODIGO))
>
>
>
>
>
> FT> ______________________________________________
> FT> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> FT> Para editar sua configuração na lista, use o endereço
> FT> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> FT> Para consultar mensagens antigas:
> FT> http://search.gmane.org/search.php?group=firebase
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.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://search.gmane.org/search.php?group=firebase
> 








Mais detalhes sobre a lista de discussão lista