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
                    Q2
Verglichen 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