Home Sobre Nós Serviços Treinamentos Blog Contato Fale Conosco LinkedIn
Oracle Performance

Como Usar Hints no Oracle: O Guia Definitivo do CBO

Quando o otimizador escolhe o plano errado — e você precisa intervir

15 Abr 2025 10 min de leitura Equipe MasterDatabase

O Oracle tem um dos otimizadores de consultas mais sofisticados do mercado. Na grande maioria das vezes, ele escolhe o plano de execução correto sozinho.

Mas não sempre.

Quando as estatísticas estão desatualizadas, quando a cardinalidade estimada difere muito da real, ou quando você conhece o dado melhor do que o otimizador — é aí que entram os hints.

O que são Hints?

Hints são instruções escritas diretamente no SQL, dentro de um comentário especial, que orientam o Cost Based Optimizer (CBO) a tomar uma decisão específica sobre o plano de execução.

SELECT /*+ HINT_EXEMPLO */ coluna1, coluna2
FROM tabela
WHERE condicao;

Três regras fundamentais:

  • Sintaxe incorreta = hint ignorado silenciosamente. O Oracle não retorna erro.
  • Todo hint (exceto RULE) usa o CBO.
  • Hints são case-insensitive, mas nome e parâmetros precisam estar corretos.

Dicionário de Hints

AND_EQUAL

Função: Força um merge scan de múltiplos índices de coluna única.

SELECT /*+ AND_EQUAL(tabela indice1 indice2) */ coluna1
FROM tabela
WHERE condicao1 AND condicao2;
Depreciado desde o Oracle 10g.

APPEND

Função: Força inserção em direct path — dados escritos acima do high water mark. Com NOLOGGING, reduz drasticamente o redo.

INSERT /*+ APPEND */ INTO tabela (col1, col2)
SELECT col1, col2 FROM outra_tabela;

Quando usar:

  • Cargas em batch de grande volume
  • ETLs em janelas de manutenção
  • Tabelas temporárias ou de staging

Restrições:

  • Tabela não pode ter triggers que impeçam direct path
  • Após INSERT com APPEND, tabela bloqueada para DML até commit

Boas práticas no uso de hints

Use hints como diagnóstico, não como solução permanente.

Documente sempre. Um hint sem comentário vai confundir qualquer DBA.

Valide com EXPLAIN PLAN:

EXPLAIN PLAN FOR
SELECT /*+ SEU_HINT */ * FROM sua_tabela WHERE condicao;

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

Referências


Consultoria especializada

Precisa de performance tuning no seu Oracle?

Otimização de consultas, análise de planos de execução e tuning avançado — é o que fazemos de melhor.