Oracle - Optimisation des requêtes

Décembre 2016


Oracle est fourni avec un optimiseur qui permet d'optimiser le plan
d'exécution d'une requête. Parfois, les caractéristiques des données
dans la base de données sont en évolution rapide, afin que l'optimiseur
(ses statistiques) soit mis à jour. Dans ce cas, les hints pourraient
aider.Soit hint le nom d'un hint. Il est intégré dans une requête comme
suit :

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

Les indications de fonctionnement (hint) peuvent être classées comme suit:

1. hint pour l'optimisation des résultats :
  • ALL_ROWS : il est habituellement utilisé pour le traitement par lots

ou les systèmes d'entreposage de données. ALL_ROWS indique à
l'optimiseur de faire en sorte d'utiliser le minimum de ressource pour
sortir le résultat complet.
  • FIRST_ROWS : L'optimiseur a pour objectif de retourner la première

ligne de la requête avec un temps de réponse minimum.
  • CHOOSE : prend en compte les statistiques si elles existent et utilise

l'optimiseur basé sur les coûts.
  • RULE : L'optimiseur ne détermine le plan d'exécution qu'au travers de

règles stricts sans tenir compte du contexte (statistiques et coûts des
accès) ou d'autres hints spécifiés dans la requête.
2. hint pour les chemins d'accès :
  • CLUSTER : demande à l'optimiseur de ramener les données d'une table

clustérisée.
  • FULL : pour le parcours complet de la table.
  • ROWID : recherche les lignes par rowid
  • INDEX (index) pour forcer l'utilisation de l'index "index".
  • INDEX pour calculer le coût pour chaque index disponible et utilise le

meilleur.
  • INDEX_ASC, INDEX_COMBINE, INDEX_DESC, INDEX_FFS, INDEX_JOIN, NO_INDEX,

HASH, AND_EQUAL.

3. hint pour les transformations de requêtes : FACT, MERGE, NO_EXPAND,
NO_EXPAND_GSET_TO_UNION, NO_FACT, NO_MERGE, NOREWRITE, REWRITE,
STAR_TRANSFORMATION, USE_CONCAT.

4. hint pour les opérations de SQL join : DRIVING_SITE, HASH_AJ,
HASH_SJ, LEADING, MERGE_AJ, MERGE_SJ, NL_AJ, NL_SJ, USE_HASH, USE_MERGE,
USE_NL.

5. hint pour l'exécution parallèle: NOPARALLEL, PARALLEL,
NOPARALLEL_INDEX, PARALLEL_INDEX, PQ_DISTRIBUTE.

6. hint supplémentaires : 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.

A voir également :

Ce document intitulé «  Oracle - Optimisation des requêtes  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.