30.08.2013 Aufrufe

Green-IT und Datenbanken - ODBMS

Green-IT und Datenbanken - ODBMS

Green-IT und Datenbanken - ODBMS

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

6.2 Energieeffizienz <strong>und</strong> Indizes<br />

Im Abfrageplan ist ersichtlich, dass alle Datensätze der Tabelle lineitem untersucht<br />

werden müssen, um das Ergebnis zu berechnen. Die Iteration am Beginn der Ausführung<br />

identifizieren wir als den teuersten Faktor bei der Ausführung.<br />

Der Index bietet die Möglichkeit, Datensätze, die nicht zu den abgefragten Bedingungen<br />

passen, effizient aus der Berechnung auszuschließen. Die Spalte l_receiptdate<br />

eignet sich bei Abfrage 12 für einen zusätzlichen Index. Der Wertebereich ist durch<br />

die WHERE-Bedingung eingegrenzt<br />

l_receiptdate >= ToDate (’1994-01-01’,’YYYY-MM-DD’)<br />

and l_receiptdate < DateAdd(’y’,1,’1994-01-01’)<br />

<strong>und</strong> die Spalte hat eine niedrige Selektivität von 0.04 %. Wir legen einen zusätzlichen<br />

Index an, der die Spalte l_receiptdate nach dem Datum indiziert. Der Abfrageoptimierer<br />

arbeitet mit Heuristiken, um die kostengünstigste Abfragevariante<br />

zu ermitteln. Nachdem der Index für l_receiptdate erstellt wurde, besteht die Möglichkeit,<br />

sich den Abfrageplan anzuzeigen, ohne dass die Abfrage ausgeführt werden<br />

muss. Die Abbildung 6.2 zeigt den Abfrageplan, nachdem der zusätzliche Index für<br />

die l_receiptdate angelegt wurde. Im Vergleich zum Abfrageplan ohne zusätzliche<br />

Indizes haben sich Veränderungen ergeben.<br />

Der Abfrageoptimierer beginnt mit der Ausführung von Modul D, dieses Modul ruft<br />

Modul B auf, das eine temporäre Datei erzeugt. Modul B liest den Index LRECIEPT-<br />

DATEIDX ; dies ist der Index, den wir für l_receiptdate angelegt haben. Es wird eine<br />

Iteration über dem Index ausgeführt, die eine eingrenzende Auswahl beinhaltet.<br />

Read index map SQLUser.LINE<strong>IT</strong>EM.LRECIEPTDATEIDX,<br />

looping on L_RECEIPTDATE (with a range condition)<br />

, L_ORDERKEY, and L_LINENUMBER.<br />

Jede Zeile, die der Bedingung genügt, wird in eine temporäre Datei A geschrieben,<br />

wobei die ID der Spalte gespeichert wird (in diesem Fall der Primärschlüssel des<br />

Datensatzes aus der Tabelle lineitem).<br />

For each row:<br />

Add a row to temp-file A, subscripted by ID,<br />

with no node data.<br />

Die temporäre Datei A wird an Modul B übergeben. Modul B ruft Modul C auf, das<br />

eine Iteration auf den gespeicherten IDs aus Datei A ausführt.<br />

Read temp-file A, looping on ID.<br />

In Modul C wird für jede ID ein Lesezugriff auf dem entsprechenden Datensatz mit<br />

dem jeweiligen Primärschlüssel der Tabelle lineitem ausgeführt.<br />

For each row:<br />

Read master map SQLUser.LINE<strong>IT</strong>EM.LINE<strong>IT</strong>EMPRIMARYIDX,<br />

using the given idkey value.<br />

91

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!