Página 1 de 1

Table access Full X Indices

Enviado: Qua, 13 Jul 2005 6:57 pm
por rogers
Estou executando a seguinte query :

Selecionar tudo

SELECT   e.status, w.prioridade, w.nome, e.usuario_ant_rep, e.data_ini,
         e.data_fim, e.cod_workflow, e.prazo, e.unidade_prazo, e.cod_etapa,
         te.descricao, e.cod_tipoetapa, w.cod_tipoworkflow, e.cod_usuario
    FROM etapa e, workflow w, tipo_etapa te
   WHERE e.cod_usuario = 1
     AND (e.status = 'não' OR e.status = 'PRO')
     AND w.cod_workflow = e.cod_workflow
     AND e.cod_tipoetapa = te.cod_tipoetapa
     AND te.tipo = 1
Existem os seguintes indices na base de dados :
ETAPA_COD_USUARIO -> em cima de COD_USUARIO da tabela ETAPA
ETAPA_STATUS -> em cima de STATUS da tabela ETAPA
TIPO_ETAPA_TIPO -> em cima de TIPO da tabela TIPO_ETAPA

No plano de execução, verifiquei que a query faz TABLE_ACCESS_FULL nas tabelas ETAPA, WORKFLOW e TIPO_ETAPA e não utiliza os índices acima.

Por que a query não utiliza os índices ETAPA_COD_USUARIO, ETAPA_STATUS e TIPO_ETAPA_TIPO ?

Enviado: Seg, 01 Ago 2005 11:54 am
por dr_gori
Seu otimizador é por CUSTO ou REGRA?
Se é CUSTO, as estatísticas estão atualizadas?

Tem casos que ele acha mais rápido não usar os índices. Um exemplo disso poder ser esse ÍNDICE no campo STATUS (com apenas SIM ou POR). Não sei quantas opções pode haver nesse campo, mas creio que não são muitas.

Tente forçar o uso do índice pra ver se vai melhorar com HINTS:

Selecionar tudo

SELECT  /*+ INDEX (seu_campo seu_indice) */
   e.status, w.prioridade, w.nome, e.usuario_ant_rep, e.data_ini, 
         e.data_fim, e.cod_workflow, e.prazo, e.unidade_prazo, e.cod_etapa, 
         te.descricao, e.cod_tipoetapa, w.cod_tipoworkflow, e.cod_usuario 
    FROM etapa e, workflow w, tipo_etapa te 
   WHERE e.cod_usuario = 1 
     AND (e.status = 'não' OR e.status = 'PRO') 
     AND w.cod_workflow = e.cod_workflow 
     AND e.cod_tipoetapa = te.cod_tipoetapa 
     AND te.tipo = 1