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
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.fk5create 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
select count(*)
from d2, d3, d4, f1
where d2.pk = f1.fk2 and d3.pk = f1.fk3 and d4.pk = f1.fk4 and fk1=10Dans 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