[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