[firebase-br] Forçando indíces

Alexandre Sousa alexandre.dantas em yahoo.com.br
Qua Fev 6 15:26:10 -03 2008


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


Mais detalhes sobre a lista de discussão lista