Green-IT und Datenbanken - ODBMS
Green-IT und Datenbanken - ODBMS
Green-IT und Datenbanken - ODBMS
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