[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