Matérialisation

Les vues et les expressions de table ne peuvent pas toujours être fusionnées. Dans certains cas, l' Db2 e matérialise la vue ou l'expression de table

Début des informations sur l'interface de programmation spécifique au programme.

Concepts introductifs
Dans l'exemple suivant, l' Db2 e effectue la matérialisation de l'expression de vue ou de table, qui est un processus en deux étapes.
  1. La fullselect qui définit la vue ou l'expression de table est exécutée sur la base de données et les résultats sont placés dans une copie temporaire d'une table de résultats.
  2. L'instruction qui fait référence à la vue ou à l'expression de table est alors exécutée sur la copie temporaire de la table de résultats pour obtenir le résultat souhaité.
La nécessité de la matérialisation dépend des attributs de l'instruction de référencement, ou de l'instruction de référencement logiquement équivalente d'une fusion antérieure, et des attributs de la fullselect qui définit la vue ou l'expression de table.

Exemple

Examinez les affirmations suivantes :

Voir la déclaration de définition
CREATE VIEW VIEW1 (VC1,VC2) AS
  SELECT SUM(C1),C2 FROM T1
    GROUP BY C2;
Voir la déclaration de référencement
SELECT MAX(VC1)
  FROM VIEW1;

L' VC1 e de colonne apparaît comme argument d'une fonction d'agrégation dans l'instruction de référence de vue. Les valeurs de VC1, telles que définies par la vue fullselect, sont le résultat de l'application de la fonction d'agrégation SUM( C1 ) à des groupes après regroupement de la table de base T1 par colonne C2. Aucune instruction SQL SELECT unique équivalente ne peut être exécutée sur la table de base T1 pour obtenir le résultat escompté. Vous ne pouvez pas spécifier que les fonctions d'agrégation soient appliquées successivement. Fin des informations sur l'interface de programmation spécifique au programme.

Lorsque les vues et les expressions de table imbriquées sont matérialisées

Db2 utilise la matérialisation pour satisfaire une référence à une vue ou une expression de table lorsqu'un traitement agrégé est impliqué (tel que le regroupement, les fonctions d'agrégation et les opérations distinctes). Ce traitement est indiqué par la définition fullselect, le traitement agrégé étant indiqué par l'instruction qui fait référence à la vue ou à l'expression de table, ou par la vue ou l'expression de table qui participe à une jointure. Pour les vues et les expressions de table définies avec des opérateurs d'ensemble, Db2 peut souvent répartir le traitement des agrégats, les jointures et les prédicats qualifiés pour éviter la matérialisation.

Le tableau suivant indique quelques cas dans lesquels la matérialisation se produit. Db2 peut également utiliser la matérialisation dans les instructions qui contiennent plusieurs jointures externes, des jointures externes combinées à des jointures internes ou des fusions qui provoquent une jointure de plus de 15 tables.

Tableau 1. Cas où Db2 effectue la matérialisation d'une expression de vue ou de table. Chaque X indique un cas de matérialisation.
SELECT FROM vue ou expression de table utilise...1 Afficher la définition ou l'expression de table2 utilise GROUP BY Voir la définition ou l'expression de table2 utilise DISTINCT Voir la définition ou l'expression de table2 utilise la fonction d'agrégation Voir la définition ou l'expression de table2 utilise la fonction d'agrégation DISTINCT Voir la définition ou l'expression de table2 utilise UNION Voir la définition ou l'expression de table2 utilise UNION ALL4
Jointure 3 X X X X X  
GROUP BY X X X X X  
DISTINCT   X   X X  
Fonction d'agrégation X X X X X X
Fonction agrégée DISTINCT X X X X X  
SELECT sous-ensemble de colonnes de vue ou d'expression de table   X     X  
Remarques :
  1. Si la vue est référencée comme cible d'une opération d'insertion, de mise à jour ou de suppression pour satisfaire la référence de vue. Seules les vues pouvant être mises à jour peuvent être la cible d'opérations d'insertion, de mise à jour et de suppression.

    Une instruction SQL peut référencer une vue particulière plusieurs fois, certaines des références pouvant être fusionnées et d'autres devant être matérialisées.

  2. Si une liste SELECT contient une variable hôte dans une expression de table, la matérialisation se produit. Par exemple :
    SELECT C1 FROM
       (SELECT :HV1 AS C1 FROM T1) X;

    Si une vue ou une expression de table imbriquée est définie pour contenir une fonction définie par l'utilisateur, et si cette fonction définie par l'utilisateur est définie comme NOT DETERMINISTIC ou EXTERNAL ACTION, alors la vue ou l'expression de table imbriquée est toujours matérialisée.

  3. Détails supplémentaires sur la matérialisation avec jointures externes :
    • Si une clause WHERE existe dans une vue ou une expression de table, et qu'elle ne contient pas de colonne, la matérialisation se produit.
      SELECT X.C1 FROM
         (SELECT C1 FROM T1
           WHERE 1=1) X LEFT JOIN T2 Y
                        ON X.C1=Y.C1;
    • Si la jointure externe est une jointure externe complète et que la liste SELECT de la vue ou de l'expression de table imbriquée ne contient pas de colonne autonome pour la colonne utilisée dans la clause ON de la jointure externe, la matérialisation se produit.
      SELECT X.C1 FROM
         (SELECT C1+10 AS C2 FROM T1) X FULL JOIN T2 Y
                        ON X.C2=Y.C2;
    • Si la liste SELECT d'une vue ou d'une expression de table imbriquée ne contient aucune colonne, la matérialisation se produit.
      SELECT X.C1 FROM
         (SELECT 1+2+:HV1. AS C1 FROM T1) X LEFT JOIN T2 Y
                        ON X.C1=Y.C1;
    • Si certaines conditions sont remplies, la matérialisation peut être évitée lorsqu'une jointure externe gauche ou droite contient les types d'expressions suivants : CASE, COALESCE ou VALUE.

      Si la vue de ligne préservée ou l'expression de table (le côté gauche d'une jointure gauche) contient une expression de type CASE, COALESCE ou VALUE, la vue ou l'expression de table n'est matérialisée que si l'expression est référencée dans un prédicat de clause ON ou WHERE en dehors de l'expression de table. Une référence dans la liste de sélection à l'expression COALESCE, VALUE ou à l' CASE, du côté des lignes conservées, ne provoque pas de matérialisation.

      Cependant, si la vue ou l'expression de table fournie nulle (le côté droit dans une jointure gauche) contient une expression COALESCE, VALUE ou CASE, la vue ou l'expression de table est matérialisée si l'expression est référencée en tant que prédicat ou dans la liste de sélection de la requête externe.

      Prenons par exemple la déclaration suivante :

      SELECT A.C1, B.C1, A.C2, B.C2
      FROM T1 ,(SELECT COALESCE(C1, 0) AS C1 ,C2 FROM T2 ) A 
      	LEFT OUTER JOIN
      	(SELECT COALESCE(C1, 0) AS C1 ,C2 FROM T3 ) B 
      	ON A.C2 = B.C2
      WHERE T1.C2 = A.C2;

      A est l'expression de table préservée d'une jointure externe gauche. A.C1 n'étant référencé par aucun prédicat, la matérialisation peut être évitée pour l'expression de table A.

      B est l'expression de table fournie par null de la jointure externe gauche. B.C1 étant référencé dans la liste de sélection de l'instruction, l'expression de table B doit être matérialisée. Si un prédicat contenait une référence à B.C1, cela nécessiterait également la matérialisation de l'expression de table B.

  4. Db2 ne peut éviter la matérialisation pour UNION ALL dans tous les cas. Parmi les situations dans lesquelles la matérialisation se produit, on peut citer :
    • Lorsque la vue est l'opérande d'une jointure externe pour laquelle des valeurs nulles sont utilisées pour les valeurs non correspondantes, la matérialisation se produit. Cette situation se produit lorsque la vue est soit l'opérande dans une jointure externe complète, l'opérande de droite dans une jointure externe gauche, ou l'opérande de gauche dans une jointure externe droite.
    • Si le nombre de tables devait dépasser 225 après la répartition, alors la répartition n'a pas lieu et le résultat est matérialisé.
  5. Pour les opérateurs d'ensemble INTERSECT et EXCEPT, les informations EXPLAIN peuvent aider à déterminer si la vue est matérialisée.

Fin des informations sur l'interface de programmation spécifique au programme.