[firebase-br] Forçando indíces

Eduardo Jedliczka edujed em gmail.com
Qui Fev 14 13:35:31 -03 2008


Você está certo,

no exemplo dele não há joins... (isto que dá fazer 3 coisas ao mesmo
tempo, isto me leva a crer que enviei uma resposta errada para outra
pessoa também - preciso rever meus conceitos kkkkkkk - acho que eu estou
ficando velho)...

mas em relação ao OR e AND sobre parâmetros, a resposta continua válida.

Sucesso,

Eduardo Jedliczka

Em Qui, 2008-02-14 às 10:18 -0200, Fausto escreveu:
> Desculpe a ignorância, mas onde tem Join implicito no exemplo que ele 
> passou?
> Fausto
> Eduardo Jedliczka escreveu:
> > Eu estou BEEEEM atrasado na minha resposta, mas vamos por partes...
> > 
> > Muitos já disseram que o FB não usa indice para o like, e é verdade.
> > 
> > mas você tem muitos JOINS implicitos neste select e reescrevê-los como
> > joins explicitos podem deixar o select mais claro, legível, e dependendo
> > dos parâmetros (principalmente no FB 1.X), gerar um plan melhor.
> > 
> > Além do like ainda há um péssimo hábito de usar and e or para os
> > parâmetros (OMITE, MERCADO), o que confunde muito o otimizador do FB, e
> > faz com que ele, eventualmente, desista de usar qualquer plan.
> > 
> > A minha sugestão para se conseguir uma boa performance é, pela aplicação
> > (ou de dentro de uma stored procedure) alterar o select para fazer
> > APENAS o que precisa ser feito... esta estória de SELECTS GENÉRICOS é
> > furada... é bom num sistema pequeno, mas testa isto daí com alguns
> > milhões de registros....
> > 
> > sucesso,
> > 
> > Eduardo Jedliczka
> > 
> > Em Qua, 2008-02-06 às 15:26 -0200, Alexandre Sousa escreveu:
> >> Olá a todos,
> >>
> >> Reabrindo um tópico que ja apareceu na lista mas que não achei resposta.
> >>
> >> Tenho a seguinte consulta:
> >>
> >> select pr.PRODUTO, pr.PR_DESCR, pr.EMPENHO, pr.REFER1, pr.EST_MIN,
> >>   pr.PESO, pr.ESTOQUE, pr.QT_SM, pr.CUSTO, pr.VL_MEDIO, pr.UMREF,
> >>   pr.GRUPO, pr.SUBGRUPO
> >> from PRODUTO pr
> >> where
> >>   (((pr.TIPO_MOVES = 1) and (:OMITE = 1)) or (:OMITE = 0)) and
> >>   (((pr.MERCADO = 0) and (:MERCADO = 1)) or (:MERCADO = 0)) and
> >>   (pr.PRODUTO like :PRODUTO)
> >>
> >> Devido a estrutura parametrizada e o uso do like, o firebird não utiliza o indice que tenho no campo PRODUTO.
> >>
> >> Tentei forçar o indice utilizando a instrução PLAN da seguinte forma:
> >>
> >> select pr.PRODUTO, pr.PR_DESCR, pr.EMPENHO, pr.REFER1, pr.EST_MIN,
> >>   pr.PESO, pr.ESTOQUE, pr.QT_SM, pr.CUSTO, pr.VL_MEDIO, pr.UMREF,
> >>   pr.GRUPO, pr.SUBGRUPO
> >> from PRODUTO pr
> >> where
> >>   (((pr.TIPO_MOVES = 1) and (:OMITE = 1)) or (:OMITE = 0)) and
> >>   (((pr.MERCADO = 0) and (:MERCADO = 1)) or (:MERCADO = 0)) and
> >>   (pr.PRODUTO like :PRODUTO)
> >>
> >> PLAN (PR INDEX (IDX_PRODUTO))
> >>
> >> mas obtive o seguinte erro:
> >>
> >>   index  cannot be used in the specified plan
> >>   .
> >>   index RDB$PRIMARY54 cannot be used in the specified plan.
> >>
> >>
> >> Alguém tem alguma idéia?
> >>
> >> Desde já agradeço.
> >>
> >>
> >> Att.
> >>
> >> Alexandre Sousa Dantas
> >> ______________________________________________
> >> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> >> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> >> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> > 
> > 
> > ______________________________________________
> > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> > 
> 
> 
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista