[firebase-br] Firebird x Processadores

Luiz Eduardo Oliveira Fonseca luizeof em gmail.com
Qua Set 27 18:47:07 -03 2006


Existe uma ferramenta, chamada EMS IB/FB manaher, da sql manager ..
www.sqlmanager.net ... existe uma versão free ... limitada.. mas q fornece
varias ianformações inportantes ..

aconselho a baixar aq versão completa apenas pra esse caso extremo, onde
creio q nao demorará mais de um mes pra resolver ... aí qdo expirar o trial
. .vc usa o free ...

lá tem mta informação em forma de gráfico, sobre as consultas etc ....


On 9/27/06, Suporte Sinapse Informática <suporte em sinapseinformatica.com.br>
wrote:
>
> Prezado Marciano,
>
> Eu já tive um problema de desempenho utilizando esse tipo de código SQL.
>
> 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'))
>
> No código acima, pelo que eu entendi você tem um parâmetro CODFIL for
> igual 0 ele não deverá filtrá pelo campo ITENS_OP.CODFIL, mesma coisa é
> feita CODPRO, CODTAM e CODPAD. Se caso o usuário não quiser informar CODFIL,
> não sei porque a consulta fica um pouco lenta quando há muitos registros. A
> maneira que eu resolvi, ao invés esse tipo parâmetro na cláusula WHERE,
> utilize o SQL DINÂMICO, pois assim o código sql filtrará a tabela exatamente
> como o usuário quer ver. Faz um teste colocando esse código com sql dinâmico
> e veja se não ficará bom.
>
> Espero ter ajudado,
>
> CARLOS HENRIQUE MEIRELES
> DESENVOLVIMENTO DE SISTEMAS
> ----- Original Message -----
> From: Marciano Bandeira
> To: FireBase
> Sent: Wednesday, September 27, 2006 1:55 PM
> Subject: Re: [firebase-br] Firebird x Processadores
>
>
> 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
> ______________________________________________
> 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
>



-- 

Atenciosamente, Luiz Eduardo.

================================
>> Desenvolvimento de Sistemas PHP, Delphi e ASP.NET

>> Manutenção em Base de Dados MySQL , Interbase/Firebird e MS Access,
PostgreSQL e SQL Server ...

Fone: (12) 8143-7191
email alternativo: luizeof.sistemas em gmail.com

================================



Mais detalhes sobre a lista de discussão lista