Choix d'une classe d'optimisation

La définition de la classe d'optimisation peut fournir certains des avantages de la spécification explicite des techniques d'optimisation.

Cela est vrai, en particulier lorsque:
  • Gestion de très petites bases de données ou de requêtes dynamiques très simples
  • Prise en compte des limitations de mémoire sur votre serveur de base de données lors de la compilation
  • Réduction du temps de compilation des requêtes ; par exemple, lors de la préparation de l'instruction

La plupart des instructions peuvent être correctement optimisées avec une quantité raisonnable de ressources en utilisant la classe d'optimisation par défaut 5. Le temps de compilation des requêtes et la consommation des ressources sont principalement influencés par la complexité d'une requête, en particulier par le nombre de jointures et de sous-requêtes. Toutefois, le temps de compilation et la consommation des ressources sont également affectés par la quantité d'optimisation effectuée.

Les classes d'optimisation de requête 1, 2, 3, 5 et 7 conviennent toutes à une utilisation générale. N'utilisez la classe 0 que si vous avez besoin de réductions supplémentaires dans le temps de compilation des requêtes et que les instructions SQL et XQuery sont très simples.

Astuce: Pour analyser une requête à exécution longue, exécutez la requête avec db2batch afin de déterminer le temps passé à la compilation et à l'exécution de la requête. Si le temps de compilation est excessif, réduisez la classe d'optimisation. Si le temps d'exécution est un problème, envisagez une classe d'optimisation plus élevée.
Lorsque vous sélectionnez une classe d'optimisation, tenez compte des instructions générales suivantes:
  • Commencez par utiliser la classe d'optimisation de requête par défaut 5.
  • Lorsque vous choisissez une classe autre que la classe par défaut, essayez d'abord la classe 1, 2 ou 3. Les classes 0, 1 et 2 utilisent l'algorithme d'énumération de jointure gourmande.
  • Utilisez la classe d'optimisation 1 ou 2 si vous disposez de plusieurs tables avec plusieurs prédicats de jointure sur la même colonne et si la durée de compilation est un problème.
  • Utilisez une classe d'optimisation faible (0 ou 1) pour les requêtes dont les temps d'exécution sont très courts et inférieurs à une seconde. Ces requêtes tendent à:
    • Accéder à une seule table ou à quelques tables seulement
    • Extraire une seule ligne ou seulement quelques lignes
    • Utiliser des index complets et uniques
    • Être impliqué dans le traitement des transactions en ligne (OLTP)
  • Utilisez une classe d'optimisation supérieure (3, 5 ou 7) pour les requêtes dont la durée d'exécution est supérieure à 30 secondes.
  • La classe 3 ou supérieure utilise l'algorithme d'énumération des jointures par programmation dynamique, qui prend en compte beaucoup plus de plans alternatifs et peut entraîner un temps de compilation significativement plus long que les classes 0, 1 ou 2, surtout à mesure que le nombre de tables augmente.
  • Utilisez la classe d'optimisation 9 uniquement si vous avez des exigences d'optimisation extraordinaires pour une requête.
Les requêtes complexes peuvent nécessiter différentes quantités d'optimisation pour sélectionner le meilleur plan d'accès. Envisagez d'utiliser des classes d'optimisation plus élevées pour les requêtes qui ont:
  • Accès à des tables de grande taille
  • Un grand nombre de vues
  • Un grand nombre de prédicats
  • De nombreuses sous-requêtes
  • Plusieurs jointures
  • De nombreux opérateurs d'ensemble, tels que UNION ou INTERSECT
  • Plusieurs lignes de qualification
  • Opérations GROUP BY et HAVING
  • expressions de tables imbriquée

Les requêtes d'aide à la décision ou les requêtes de génération de rapports de fin de mois sur des bases de données entièrement normalisées sont de bons exemples de requêtes complexes pour lesquelles au moins la classe d'optimisation de requête par défaut doit être utilisée.

Utilisez des classes d'optimisation de requête plus élevées pour les instructions SQL et XQuery produites par un générateur de requête. De nombreux générateurs de requêtes créent des requêtes inefficaces. Les requêtes incorrectement écrites nécessitent une optimisation supplémentaire pour sélectionner un bon plan d'accès. L'utilisation de la classe d'optimisation de requête 2 ou supérieure peut améliorer ces requêtes.

Pour les applications SAP , utilisez toujours la classe d'optimisation 5. Cette classe d'optimisation active de nombreuses fonctions Db2® optimisées pour SAP, telles que la définition de la variable de registre DB2_REDUCED_OPTIMIZATION .

Dans une base de données fédérée, la classe d'optimisation ne s'applique pas à l'optimiseur distant.