Table access Full X Indices

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
rogers
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Sáb, 14 Mai 2005 3:04 pm
Localização: RJ

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 ?
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

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 
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 8 visitantes