[firebase-br] Firebird x Processadores
Marciano Bandeira
marciano.bandeira em bol.com.br
Qua Set 27 13:55:11 -03 2006
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
Mais detalhes sobre a lista de discussão lista