Beispiele für den Zickzack-Join-Zugriffsplan
Die folgenden Beispiele zeigen die Ausgabe des Befehls db2exfmt für verschiedene Zugriffspläne, die mit einem Zickzack-Join möglich sind.
Diese Beispiele verwenden eine sternförmige Abfrage
mit DAILY_SALES als Fakttabelle und mit CUSTOMER und PERIOD als
Dimensionstabellen. Die Abfrage ermittelt für März 1996 die Gesamtmenge der an Kunden
der Altersgruppe 7 verkauften Produkte. Die Ergebnisse werden anhand der Beschreibung
der Einkommenshöhe des Kunden zusammengefasst angezeigt.
select income_level_desc, sum(quantity_sold) "Quantity"
from daily_sales s, customer c, period p
where calendar_date between '1996-03-01' and '1996-03-31'
and p.perkey = s.perkey
and s.custkey = c.custkey
and age_level = 7
group by income_level_desc;Beim
Zickzack-Join sind drei Arten von Zugriffsplänen möglich.
- Plan 'Indexsuche/Abruf': Bei diesem Plan greift die Indexsuche über die Fakttabelle auf den Index zu, um Satz-IDs aus der Fakttabelle abzurufen, die mit den Eingabetestwerten übereinstimmen. Diese Fakttabellen-Satz-IDs werden anschließend verwendet, um die erforderlichen Fakttabellendaten aus der Fakttabelle abzurufen. Alle Nutzdatenspalten der Dimensionstabelle werden dann aus der Dimensionstabelle abgerufen und die Ergebniszeile wird vom Zickzack-Join-Operator ausgegeben.
- Plan 'Vorablesezugriff über Listen (einzelner Test)': Bei diesem Plan wird ein Vorablesezugriff über Listen für jede Testzeile aus der Kombination von Dimensionstabellen und Snowflakes ausgeführt. Die Indexsuche in der Fakttabelle ermittelt die Fakttabellen-Satz-IDs, die mit den Eingabetestwerten übereinstimmen. Die Operatoren SORT, RIDSCAN und FETCH sortieren Satz-IDs nach den Datenseiten-IDs und die Listenvorablesefunktionen beginnen, die Fakttabellendaten abzurufen. Alle Nutzdatenspalten der Dimensionstabelle werden dann aus den Dimensionstabellen abgerufen und die Ergebniszeile wird vom Zickzack-Join-Operator ausgegeben.
- Plan 'Vorablesezugriff über Listen (alle Tests)': Bei diesem Plan greift die Indexsuche auf den Fakttabellenindex für alle Tests aus der Kombination von Dimensionstabellen und Snowflakes zu. Alle diese übereinstimmenden Satz-IDs werden zusammen in der Reihenfolge der Fakttabellen-Datenseiten sortiert und die Listenvorablesefunktionen beginnen damit, die erforderlichen Daten aus der Fakttabelle abzurufen. Diese Methode, bei der alle Satz-IDs sortiert werden, trägt zu einem verbesserten Vorablesezugriff bei. Diese Abfragen beinhalten zwei separate ZZJOIN-Operatoren, von denen einer einen Back-Join zwischen der Fakttabelle und den Dimensionstabellen darstellt.
Beispiel: Zugriff 'Indexsuche/Abruf' auf die Fakttabelle
2.6623e+06
ZZJOIN
( 5)
7620.42
5.37556
+------------------+------------------+
292.2 40000 0.227781
TBSCAN TBSCAN FETCH
( 6) ( 9) ( 13)
56.2251 7596.78 11.8222
1 2.92 1.22778
| | /---+----\
292.2 40000 0.227781 6.65576e+08
TEMP TEMP IXSCAN TABLE: POPS
( 7) ( 10) ( 14) DAILY_SALES
30.4233 4235.52 9.93701 Q3
1 2.92 1
| | |
292.2 40000 6.65576e+08
IXSCAN FETCH INDEX: POPS
( 8) ( 11) PER_CUST_ST_PROMO
29.9655 4235.07 Q3
1 2.92
| /---+----\
2922 40000 1e+06
INDEX: POPS IXSCAN TABLE: POPS
PERX1 ( 12) CUSTOMER
Q1 2763.52 Q2
1
|
1e+06
INDEX: POPS
CUSTX1
Q2
Die Operatoren TBSCAN(6) und TBSCAN(9) zeigen die folgenden Informationen an:
IS_TEMP_INDEX : True/False
The scan builds an index over the temp for random access of the temp.
(If the flag is 'true')
The scan builds a fast integer sort structure for random access of the temp.
(If the flag is 'false')Die
Operatoren TBSCAN(6) und TBSCAN(9) zeigen die Informationen zu den Feedback-Vergleichselementen an,
die in Form von Start-Stopp-Schlüsselbedingungen auf die Operatoren angewendet werden.
Predicates:
----------
5) Start Key Predicate,
Comparison Operator: Equal (=)
Subquery Input Required: No
Filter Factor: 0.000342231
Predicate Text:
--------------
(Q1.PERKEY = Q3.PERKEY)
5) Stop Key Predicate,
Comparison Operator: Equal (=)
Subquery Input Required: No
Filter Factor: 0.000342231
Predicate Text:
--------------
(Q1.PERKEY = Q3.PERKEY)
Der Operator ZZJOIN(5) zeigt
alle Feedback-Vergleichselemente, die bei der Verarbeitung eines Zickzack-Joins verwendet werden.
Predicates:
----------
4) Feedback Predicate used in Join,
Comparison Operator: Equal (=)
Subquery Input Required: No
Filter Factor: 1e-06
Predicate Text:
--------------
(Q3.CUSTKEY = Q2.CUSTKEY)
5) Feedback Predicate used in Join,
Comparison Operator: Equal (=)
Subquery Input Required: No
Filter Factor: 0.000342231
Predicate Text:
--------------
(Q1.PERKEY = Q3.PERKEY)Beispiel: Zugriff 'Vorablesezugriff über Listen (einzelner Test)' auf die Fakttabelle
2.6623e+06
ZZJOIN
( 5)
1.10517e+06
5.37556
+------------------+---+-----------------------+
292.2 40000 0.227781
TBSCAN TBSCAN FETCH
( 6) ( 9) ( 13)
56.2251 7596.78 548787
1 2.92 1.22778
| | /----+----\
292.2 40000 0.227781 6.65576e+08
TEMP TEMP RIDSCN TABLE: POPS
( 7) ( 10) ( 14) DAILY_SALES
30.4233 4235.52 319827 Q3
1 2.92 1
| | |
292.2 40000 0.227781
IXSCAN FETCH SORT
( 8) ( 11) ( 15)
29.9655 4235.07 319827
1 2.92 1
| /---+----\ |
2922 40000 1e+06 0.227781
INDEX: POPS IXSCAN TABLE: POPS IXSCAN
PERX1 ( 12) CUSTOMER ( 16)
Q1 2763.52 Q2 10.0149
1 1
| |
1e+06 6.65576e+08
INDEX: POPS INDEX: POPS
CUSTX1 PER_CUST_ST_PROMO
Q2 Q3
Hieraus ist ersichtlich, dass der Unterschied zwischen dem Plan 'Indexsuche/Abruf' und dem Plan 'Vorablesezugriff über Listen (einzelner Test)' in der Art und Weise liegt, wie der Zugriff auf die Fakttabelle erfolgt.
Alle anderen Operatoren zeigen dieselben Informationen wie die Operatoren im vorherigen Beispiel.
Beispiel: Zugriff 'Vorablesezugriff über Listen (alle Tests)' auf die Fakttabelle
2.6623e+06
ZZJOIN
( 2)
78132.52
27.81
|
2.6623e+06
FETCH
( 3)
65524.23
27.81
|
2.6623e+06
RIDSCN
( 4)
56514.23
4.92
|
2.6623e+06
SORT
( 5)
56514.23
4.92
|
2.6623e+06
ZZJOIN
( 6)
7616.65
4.92
+---------------+--+------------+
292.2 40000 0.227781
TBSCAN TBSCAN IXSCAN
( 7) ( 10) ( 14)
56.2251 7596.78 9.93701
1 2.92 1
| | |
292.2 40000 6.65576e+08
TEMP TEMP INDEX: POPS
( 8) ( 11) PER_CUST_ST_PROMO
30.4233 4235.52 Q3
1 2.92
| |
292.2 40000
IXSCAN FETCH
( 9) ( 12)
29.9655 4235.07
1 2.92
| /---+----\
2922 40000 1e+06
INDEX: POPS IXSCAN TABLE: POPS
PERX1 ( 13) CUSTOMER
Q1 2763.52 Q2
1
|
1e+06
INDEX: POPS
CUSTX1
Q2Verglichen mit den anderen Zugriffsplänen
zeigt der Plan 'Vorablesezugriff über Listen (alle Tests)'
einen zusätzlichen Operator: ZZJOIN (2). Dieser Operator wird verwendet, um Back-Joins
der Fakttabelle mit der Dimensionstabelle auszuführen. Er zeigt folgende Informationen
an:
Backjoin = True