[firebase-br] Firebird x Processadores

Douglas nix em nixespecializada.com.br
Qua Set 27 16:47:57 -03 2006


Bom, você pode forçar o PLAN no SQL para que ele seja usado.

Qto aos índices. Pedicados no WHERE com AND se beneficiam de índices de todos 
os campos inclusos, enaqunto com OR de um índice para cada campo.

Em Quarta 27 Setembro 2006 13:55, Marciano Bandeira escreveu:
> Procedimento que retorna a quantidade de produtos em aberto na produção
> Minha procedure executa esta select...
>
>   Select
>     Sum(Itens_Op.QTSET)
>   From
>     Itens_OP
>   Where
>     ((:CODFIL = 0) or (:CODFIL = Itens_Op.CODFIL)) and
>     ((:CODPRO = 0) or (:CODPRO = Itens_OP.CODPRO)) and
>     ((:CODTAM = 0) or (:CODTAM = Itens_OP.CODTAM)) and
>     ((:CODPAD = 0) or (:CODPAD = Itens_Op.CODPAD)) and
>     ((Itens_Op.FLAG = 'A'))
>
> ... e o PLAN gerado é NATURAL, estranho, pois a tabela Itens_OP tem índices
> para as colunas CODFIL, CODPRO, CODTAM e CODPAD (um indice por coluna).
>
>
> Procedimento que me retorna a quantidade que tenho de pedidos de um produto
> Minha procedure executa esta select...
>
>   Select
>     Sum(Itens_Ped.QTPRO - (Itens_Ped.QTCAN + Itens_Ped.QTFAT))
>   From
>     Itens_Ped
>   Left Join Pedidos On (Itens_Ped.IDPED = Pedidos.IDPED)
>   Where
>     ((Pedidos.FLAG = 'P') or (Pedidos.FLAG = 'T') or (Pedidos.FLAG = 'A'))
> and
>     ((Pedidos.TIPO = 1)   or (Pedidos.TIPO = 3))
> and
>     ((:CODFIL         = 0)   or (:CODFIL         = Pedidos.CODFIL))
> and
>     ((:CODPRO         = 0)   or (:CODPRO         = Itens_Ped.CODPRO))
> and
>     ((:CODPAD         = 0)   or (:CODPAD         = Itens_Ped.CODPAD))
> and
>     ((:CODTAM         = 0)   or (:CODTAM         = Itens_Ped.CODTAM))
> and
>     ((:CODGRD         = 0)   or (:CODGRD         = Itens_Ped.CODGRD))
>
> e o plan gerado é este...
> PLAN JOIN (ITENS_PED NATURAL,PEDIDOS INDEX (PEDIDOS_IDPED))
>
> ... segue o mesmo caso da rotina que retorna a qtde aberto na produção,
> tenho indices para as colunas CODFIL, CODPRO, CODPAD, CODTAM, CODGRD na
> tabela Itens_Ped (um indice para cada coluna).
>
>
>
> Ja a rotina que me retorna o estoque tem um comportamento diferente,
> o select realizado é este...
>
>   Select
>     Sum(prodest.estfis)
>   From
>     prodest
>   Where
>     (
>         ((:CODDEP  = 0) and (ProdEst.coddep <> :CODDEP_DEF)) or
>         ((:CODDEP <> 0) and (ProdEst.coddep =  :CODDEP))
>     )                                             and
>     ((:codfil = 0) or (prodest.codfil = :codfil)) and
>     (:CODPRO = prodest.codpro)                    and
>     ((:CODTAM = 0) or (:CODTAM = prodest.codtam)) and
>     ((:CODPAD = 0) or (:CODPAD = prodest.codpad))
>
> ... o PLAN gerado é este...
> PLAN (PRODEST INDEX (PRODEST_CODPRO))
>
> ... Tenho indices para as colunas CODPRO, CODPAD, CODTAM, CODFIL, CODDEP
> (um indice para cada coluna).
>
>
>
> O que poderia resolver isto, porque a rotina do estoque usa um PLAN com
> indice e as outroas não?
> É aconcelhavel criar indices separados por coluna ou indices com varias
> colunas juntas?
> Como fasso pra colocar um PLAN definido por min na consulta?
>
> Grato
> Marciano Bandeira
>
>
> ______________________________________________
> 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

-- 
Nix Expecializada
Soluções em Interconectividade, Servidores e Segurança de Rede com Software 
Livre.
Rua São José, 1.182 – sala 6.
Centro – Piracicaba/SP – 13400-330
Contatos:(19)3434-3526          E-mail: nix em nixespecializada.com.br
         (19)9183-4244 Douglas  E-mail: douglas em nixespecializada.com.br
         (19)9183-4238 Judson   E-mail: judson em nixespecializada.com.br




Mais detalhes sobre a lista de discussão lista