Super Dicionário de Hints do Oracle

Quando trabalhamos com Oracle, um ponto importante para otimizar o desempenho das consultas SQL é entender como orientar o otimizador a escolher determinados planos de execução. É exatamente para isso que servem os hints.

Ao inserir hints (dicas) diretamente na consulta, podemos influenciar o Cost Based Optimizer (CBO) a tomar decisões mais adequadas em situações específicas.


O que são Hints?

Os hints são instruções especiais escritas em comentários dentro de uma consulta SQL, que afetam o plano de execução escolhido pelo Oracle. O formato geral é:





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

AND_EQUAL

APPEND

APPEND_VALUES

ALL_ROWS

BITMAP

CACHE / NOCACHE

CHOOSE

CLUSTER

CURSOR_SHARING_EXACT

CARDINALITY

DISTRIBUTE / DISTRIBUTE_JOIN

DRIVING_SITE

DYNAMIC_SAMPLING

EXPAND_GSET_TO_UNION

FACT / NO_FACT

FIRST_ROWS(n)

FULL

GATHER_PLAN_STATISTICS

HASH

HASH_AJ

HASH_SJ

INDEX

INDEX_ASC / INDEX_DESC

INDEX_COMBINE

INDEX_FFS

INDEX_JOIN

INDEX_SS / INDEX_SS_ASC / INDEX_SS_DESC

NO_INDEX / NO_INDEX_FFS / NO_INDEX_SS

INVISIBLE (NO_USE_INVISIBLE_INDEXES / USE_INVISIBLE_INDEXES)

LEADING

MERGE

MERGE_AJ

MONITOR / NO_MONITOR

NL_AJ / NL_SJ

NO_EXPAND

NO_MERGE

NO_PARALLEL / NOPARALLEL

NO_PARALLEL_INDEX

NO_PUSH_PRED / NO_PUSH_SUBQ

NO_QUERY_TRANSFORMATION

NO_REWRITE / NOREWRITE

NO_STAR_TRANSFORMATION

NO_USE_HASH / NO_USE_MERGE / NO_USE_NL

NOCACHE

NOAPPEND

OPT_PARAM

ORDERED

ORDERED_PREDICATES

PARALLEL

PQ_DISTRIBUTE

PUSH_PRED / PUSH_SUBQ

QB_NAME

REWRITE

RESULT_CACHE / NO_RESULT_CACHE

ROWID

RULE

SPREAD_MIN_ANALYSIS

STAR

STAR_TRANSFORMATION

SWAP_JOIN_INPUTS

SWAP_JOIN_INPUTS_AJ

UNNEST / NO_UNNEST

USE_SEMI

USE_CONCAT

USE_ANTI

USE_HASH / USE_MERGE / USE_NL


Dica sobre a Dica..

  1. Versão do Oracle: Alguns hints surgiram ou foram removidos em certas versões. Sempre verifique a documentação da sua versão específica (10g, 11g, 12c, 18c, 19c, 21c, etc.).
  2. Sintaxe Exata: Um simples erro de ortografia (por exemplo, esquecer o “+” em /*+ ... */, escrever INDEXS em vez de INDEX) faz o Oracle ignorar completamente o hint.
  3. Estatísticas Atualizadas: O Cost Based Optimizer (CBO) funciona melhor com estatísticas de tabelas e índices coerentes. Sem elas, mesmo os hints podem produzir resultados inconsistentes.
  4. Ferramentas de Análise:
    • Use EXPLAIN PLAN e DBMS_XPLAN.DISPLAY (ou DBMS_XPLAN.DISPLAY_CURSOR) para verificar se o hint foi aplicado e qual foi o plano de execução.
    • Verifique também colunas como NOTE que podem indicar se houve “unrecognized hint” ou “hint ignored”.
  5. Relevância:
    • Alguns hints (especialmente os marcados como dep. ou deprecated) podem não ter efeito.
    • Muitos hints antigos foram substituídos por melhorias automáticas no CBO nas versões recentes.
  6. Testes A/B: Sempre compare o plano de execução com e sem o hint. Às vezes, o otimizador padrão pode ser melhor do que forçar um caminho específico.
  7. Documentação Oficial: Consulte o capítulo “Hints” do Oracle Database SQL Tuning Guide para sua versão.

Boa consulta e bons tunings!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *