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

Carlos H. Cantu listas em warmboot.com.br
Ter Abr 26 13:26:02 -03 2005


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





Mais detalhes sobre a lista de discussão lista