Jointures en zigzag avec des écarts d'index

Même s'il existe un écart dans les index composites, en raison d'un prédicat de jointure manquant ou d'une dimension manquante dans la requête, l'optimiseur de requête reconnaît la forme en étoile d'une requête et peut sélectionner un plan d'accès approprié avec une jointure en zigzag. Toutefois, les performances du plan d'accès peuvent ne pas être optimales. Examinez la sortie de la commande db2exfmt pour déterminer s'il existe des écarts d'index dans votre requête et envisagez d'ajouter de nouveaux index ou de modifier des index existants pour améliorer les performances.

Exemple: jointure en zigzag avec une dimension manquante

Cet exemple est basé sur la requête suivante, où d1, d2, d3, d4et d5 sont des dimensions et f1 est une table de faits.
select count(*) 
from d1, d3, d4, d5, f1 
where d1.pk = f1.fk1 and d3.pk = f1.fk3 and d4.pk = f1.fk4 and d5.pk = f1.fk5
Un index sur la table de faits f1 a été créé à l'aide de la commande suivante:
create index i11 on f1(fk1, fk2, fk3, fk4, fk5, fk6);

La requête joint les dimensions d1, d3, d4, d5 avec la table de faits f1. Etant donné que la dimension d2 n'est pas incluse dans la requête, il n'existe pas de prédicat de jointure avec la dimension d2 sur la colonne fk2. L'optimiseur de requêtes reconnaît la colonne de faits fk2 comme un écart dans l'index et peut utiliser l'index pour une jointure en zigzag.

La sortie de la commande db2exfmt indique que l'analyse d'index est une analyse de saut, en indiquant l'option JUMPSCAN=TRUE. La sortie montre également les informations d'écart d'index, en particulier que la deuxième colonne d'index a un écart de positionnement et que les autres colonnes ne l'ont pas.




                                         Rows 
                                        RETURN
                                        (   1)
                                         Cost 
                                          I/O 
                                          |
                                           1 
                                        GRPBY 
                                        (   2)
                                        1539.45 
                                          33 
                                          |
                                         1000 
                                        ZZJOIN
                                        (   3)
                                        1529.44 
                                          33 
       +----------------+----------------++---------------+------------------+
      1000             1000             1000             1000               1000 
     TBSCAN           TBSCAN           TBSCAN           TBSCAN             FETCH 
     (   4)           (   9)           (  14)           (  19)             (  24)
     184.085          184.085          184.085          184.085            205.222 
        8                8                8                8                  1 
       |                |                |                |              /---+----\
      1000             1000             1000             1000         1000         1000 
     TEMP             TEMP             TEMP             TEMP         RIDSCN   TABLE: STAR
     (   5)           (  10)           (  15)           (  20)       (  25)         F1
     184.003          184.003          184.003          184.003      55.5857        Q1
        8                8                8                8            1 
       |                |                |                |            |
      1000             1000             1000             1000         1000 
     TBSCAN           TBSCAN           TBSCAN           TBSCAN       SORT  
     (   6)           (  11)           (  16)           (  21)       (  26)
     178.62           178.62           178.62           178.62       55.5342 
        8                8                8                8            1 
       |                |                |                |            |
      1000             1000             1000             1000         1e-09 
     SORT             SORT             SORT             SORT         IXSCAN
     (   7)           (  12)           (  17)           (  22)       (  27)
     178.569          178.569          178.569          178.569      12.0497 
        8                8                8                8            1 
       |                |                |                |            |
      1000             1000             1000             1000         1000 
     TBSCAN           TBSCAN           TBSCAN           TBSCAN   INDEX: STAR
     (   8)           (  13)           (  18)           (  23)         I11
     135.093          135.093          135.093          135.093        Q1
        8                8                8                8 
       |                |                |                |
      1000             1000             1000             1000 
 TABLE: STAR      TABLE: STAR      TABLE: STAR      TABLE: STAR
       D1               D3               D4               D5
       Q5               Q4               Q3               Q2

JUMPSCAN: (Jump Scan Plan)
			TRUE

	Gap Info:            Status
		---------            ------
		Index Column 0:      No Gap            
		Index Column 1:      Positioning Gap   
		Index Column 2:      No Gap            
		Index Column 3:      No Gap            
		Index Column 4:      No Gap      

Exemple: jointure en zigzag avec prédicat de jointure manquant sur la colonne de faits

Cet exemple est basé sur la requête suivante:

select count(*) 
from d2, d3, d4, f1 
where d2.pk = f1.fk2 and d3.pk = f1.fk3 and d4.pk = f1.fk4 and fk1=10

Dans cette requête, les dimensions d2, d3 et d4 sont associées à la table de faits f1. Il n'y a pas de prédicat de jointure sur la colonne de faits fk1, il n'y a qu'un prédicat local fk1=10.

L'optimiseur de requêtes reconnaît la colonne de faits fk1 comme un écart, car il n'y a pas de prédicat de jointure dessus. L'optimiseur de requête peut toujours utiliser l'index pour la jointure en zigzag.

La sortie de la commande db2exfmt indique que l'analyse d'index est une analyse de saut, en indiquant l'option JUMPSCAN=TRUE. La sortie montre également les informations d'écart d'index, en particulier que la première colonne d'index a un écart de positionnement et que les autres colonnes ne l'ont pas.



                     Rows 
                    RETURN
                    (   1)
                     Cost 
                      I/O 
                      |
                       1 
                    GRPBY 
                    (   2)
                    893.899 
                     25.12 
                      |
                      40 
                    HSJOIN
                    (   3)
                    893.489 
                     25.12 
         /------------+-------------\
      1000                            40 
     TBSCAN                         ZZJOIN
     (   4)                         (   5)
     135.093                        750.88 
        8                            17.12 
       |            +----------------++-----------------+
      1000         1000             1000                40 
 TABLE: STAR  TBSCAN           TBSCAN             FETCH 
       D4         (   6)           (  11)             (  16)
       Q2         184.085          184.085            18.1845 
                     8                8               1.12004 
                    |                |              /---+----\
                   1000             1000          40          1000 
                  TEMP             TEMP         RIDSCN   TABLE: STAR
                  (   7)           (  12)       (  17)         F1
                  184.003          184.003      13.4358        Q1
                     8                8          1.12 
                    |                |            |
                   1000             1000          40 
                  TBSCAN           TBSCAN       SORT  
                  (   8)           (  13)       (  18)
                  178.62           178.62       13.3843 
                     8                8          1.12 
                    |                |            |
                   1000             1000         4e-05 
                  SORT             SORT         IXSCAN
                  (   9)           (  14)       (  19)
                  178.569          178.569      12.5738 
                     8                8          1.12 
                    |                |            |
                   1000             1000         1000 
                  TBSCAN           TBSCAN   INDEX: STAR
                  (  10)           (  15)         I11
                  135.093          135.093        Q1
                     8                8 
                    |                |
                   1000             1000 
              TABLE: STAR      TABLE: STAR
                    D2               D3
                    Q4               Q3

		JUMPSCAN: (Jump Scan Plan)
			TRUE

		Gap Info:            Status
		---------            ------
		Index Column 0:      Positioning Gap   
		Index Column 1:      No Gap            
		Index Column 2:      No Gap