Optimiseur de requêtes : ses tâches
- Rappel : SQL est un langage déclaratif
- Optimisation de requête = choix d'un plan d'exécution
- Ordre d'évaluation des expressions
- transformation des expressions (ex. requêtes imbriquées en jointures)
- choix du but, le paramètre à optimiser
- Choix des chemains d'accès
- ordre de réalisation des jointures
- Les moyens de maîtrise de l'utilisateur :
- Déterminer le but
- Récolter des stats
- Forcer des choix de l'optimiseur avec ``HINT''
Optimiseur de requête : quel objectif ?
- Deux possibilités sous Oracle
- Minimiser le temps de réponse global (ALL_ROWS, par défaut)
- Minimiser le temps des n premières réponses (FIRST_ROW)
- n peut être égal à 1, 100 ou 1000
- FIRST_ROWS est à utiliser en cas d'interaction directe avec l'utilisateur
- C'est un paramètre de session
- On peut forcer l'optimiseur avec un HINT
- On peut se baser sur le temps CPU (par défaut) ou les E/S
Optimiseur de requêtes : paramètres
- Deux possibilités sous Oracle
- Minimiser le temps de réponse global (ALL_ROWS, par défaut)
- Minimiser le temps des n premières réponses (FIRST_ROW)
- n peut être égal à 1, 100 ou 1000
- FIRST_ROWS est à utiliser en cas d'interaction directe avec l'utilisateur
- C'est un paramètre de session
- On peut forcer l'optimiseur avec un HINT
- On peut se baser sur le temps CPU (par défaut) ou les E/S
Les chemins d'accès du plan d'exécution
- FULL TABLE SCAN : parcours séquentiel complet d'une table
- ROWID SCAN : Accès direct à un ensemble de tuples (après un INDEX SCAN)
- INDEX SCAN : Accès à un index
- Unique scan, range scan, full scan, index joins, bitmap joins
- CLUSTER ACCESS : parcours d'un cluster
- SAMPLE TABLE SCAN : accès à un extrait de la base, spécifié dans la requête
- On peut toujours les forcer avec un ``HINT``
Les différents types de jointure
- Jointure imbriquée : double boucle
- Lorsque peu de lignes doivent être jointes
- La seconde table est accédée rapidement à partir de l'attribut de jointure
- O(NxM)
- jointure par hachage : la table la plus petite est ''hachée`` en mémoire
- Lorsque la table hachée tient en mémoire
- Un seul parcours de chaque table
- Jointure par tri fusion : tri puis fusion de chaque opérande
- Lorsque les sources sont déjà triées
- La condition de jointure est une inégalité
- Jointure cartésienne : produit cartésien, pas de condition de jointure
- Toutes ces variantes existent en jointure externe.
fabien
2007-11-22