Oracle - Otimização das consultas

Agosto 2017


Oracle vem com um otimizador que aperfeiçoa o plano de execução de uma consulta.
Às vezes, as características dos dados no banco de dados evoluem rapidamente, para que o
otimizador (suas estatísticas) seja atualizado.
Neste caso, os "Hints" (SQL) poderiam ajudar.
Seja "Hint" ou o nome de um "Hint". Ele está integrado em uma consulta, assim:

SELECT /* + hint(table) */ column1, column2 FROM table WHERE condition;

As indicações de funcionamento (hint) podem ser classificadas da seguinte maneira:

1. Hint para a otimização dos resultados:
  • ALL_ROWS : normalmente usado para o procesamento, por lotes ou sistemas de armazenamento

de dados. ALL_ROWS indica ao otimizador para utilizar um mínimo de recurso ao
retornar o resultado completo.
  • FIRST_ROWS : O otimizador deverá retornar a primeira

linha da consulta, com um tempo mínimo de resposta.
  • CHOOSE : leva em conta as estatísticas, caso elas existam e; utiliza o otimizador

com base nos custos.
  • RULE : O otimizador só determina o plano de execução através de

regras estritas, sem levar em conta o contexto (estatísticas e custos de acesso) ou outros hints especificados na consulta.
2. Hint para os caminhos de acesso:
  • CLUSTER : pede ao otimizador para retornar os dados de uma tabela aglomerada ("clusterizada").
  • FULL : para o percurso completo da tabela.
  • ROWID : busca de linhas por rowid
  • INDEX (index) para forçar o uso do índice "Index".
  • INDEX para calcular o custo de cada índice disponível e utilizar o melhor.
  • INDEX_ASC, INDEX_COMBINE, INDEX_DESC, INDEX_FFS, INDEX_JOIN, NO_INDEX,

HASH, AND_EQUAL.

3. Hint para as transformações de consultas : FACT, MERGE, NO_EXPAND,
NO_EXPAND_GSET_TO_UNION, NO_FACT, NO_MERGE, NOREWRITE, REWRITE,
STAR_TRANSFORMATION, USE_CONCAT.

4. Hint para as operações de SQL junto: DRIVING_SITE, HASH_AJ,
HASH_SJ, LEADING, MERGE_AJ, MERGE_SJ, NL_AJ, NL_SJ, USE_HASH, USE_MERGE,
USE_NL.

5. Hint para a execução paralela: NOPARALLEL, PARALLEL,
NOPARALLEL_INDEX, PARALLEL_INDEX, PQ_DISTRIBUTE.

6. Hint adicionais : ANTIJOIN, APPEND, BITMAP, BUFFER, CACHE,
CARDINALITY, CPU_COSTING,DYNAMIC_SAMPLING, INLINE, MATERIALIZE,
NO_ACCESS, NO_BUFFER, NO_MONITORING, NO_PUSH_PRED, NO_PUSH_SUBQ,
NO_QKN_BUFF, NO_SEMIJOIN, NOAPPEND, NOCACHE, OR_EXPAND, ORDERED,
ORDERED_PREDICATES, PUSH_PRED, PUSH_SUBQ, QB_NAME, RESULT_CACHE,
SELECTIVITY, SEMIJOIN, SEMIJOIN_DRIVER, STAR, SWAP_JOIN_INPUTS,
USE_ANTI, USE_SEMI.


Tradução feita por Lucia Maurity y Nouira

Veja também

Artigo original publicado por . Tradução feita por pintuda. Última modificação: 28 de março de 2012 às 19:43 por pintuda.
Este documento, intitulado 'Oracle - Otimização das consultas', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.