DB2 Universal Database - Systemverwaltung
Zur Unterstützung benutzerdefinierter Indexarten ermöglicht DB2 Universal
Database das Erstellen und Anwenden eigener Logikelemente für die
Primärkomponenten, die die Funktionsweise eines Index festlegen. Die
folgenden Komponenten können ersetzt werden:
- Indexverwaltung. Diese Komponente ermöglicht die Zuordnung des
Inhalts von Indexspalten zu einem bestimmten Indexschlüssel. Derartige
Zuordnungen werden mit einer benutzerdefinierten Zuordnungsfunktion
ausgeführt. In einem erweiterten Index kann genau eine Spalte eines
strukturierten Typs verwendet werden. Anders als bei einem normalen
Index kann ein erweiterter Index mehrere Indexeinträge pro Zeile
umfassen. Mehrere Indexeinträge pro Zeile ermöglichen das Speichern
eines Textdokuments als Objekt mit einem separaten Indexeintrag für jedes
Schlüsselwort im Dokument.
- Indexausnutzung. Diese Komponente ermöglicht dem
Anwendungsentwickler die Zuordnung von Filterbedingungen (Bereichsprädikaten)
zu einer beliebigen benutzerdefinierten Funktion (UDF), die andernfalls für
das Optimierungsprogramm nicht transparent wäre. Hierdurch kann DB2
einen separaten UDF-Aufruf für jede Zeile und einen Kontextwechsel zwischen
Client und Server vermeiden, wodurch sich die Leistung entscheidend verbessern
läßt.
Anmerkung: | Die benutzerdefinierte Funktionsdefinition muß deterministisch gestaltet sein
und darf die Ausführung externer Aktionen nicht zulassen, um vom
Optimierungsprogramm genutzt werden zu können.
|
Eine wahlfreie Datenfilterfunktion kann ebenfalls angegeben werden.
Das Optimierungsprogramm verwendet den Filter gegen den abgerufenen Tupel,
bevor die benutzerdefinierte Funktion bewertet wird.
Nur eine Spalte mit einem strukturierten oder einzigartigen Datentyp kann
die Indexerweiterung zum Erstellen einer benutzerdefinierten Indexart für
diese Objekte nutzen. Der Typ des benutzerdefinierten erweiterten Index
darf die folgenden Merkmale nicht aufweisen:
- Definition mit in Gruppen zusammengefaßten Indizes
- Vorhandensein von INCLUDE-Spalten
Sie definieren zwei der Komponenten, die zum Funktionieren eines Index
erforderlich sind, mit der Anweisung CREATE INDEX EXTENSION.
Die Indexverwaltung dient zum Umsetzen des Inhalts der Indexspalte
(bzw. des Quellenschlüssels) in einen Zielindexschlüssel. Der
Umsetzungsprozeß wird mit Hilfe einer Tabellenfunktion definiert, die zuvor in
der Datenbank definiert wurde.
Die Klausel FROM SOURCE KEY gibt einen strukturierten oder einzigartigen
Datentyp für die Quellenschlüsselspalte an, die von dieser Indexerweiterung
unterstützt wird. Für die Quellenschlüsselspalte wird ein einziger
Parameternamen und Datentyp angegeben und zugeordnet.
Die Klausel GENERATE KEY USING gibt die benutzerdefinierte Tabellenfunktion
an, die zum Generieren des Indexschlüssels verwendet wird. Die von
dieser Funktion erzeugte Ausgabe muß in der u. a.
Klauselspezifikation TARGET KEY angegeben werden. Sie kann außerdem als
Eingabe für die Indexfilterfunktion verwendet werden, die in der Klausel
FILTER USING angegeben wurde.
Bei der Indexsuche werden bestimmte Suchargumente einzelnen
Suchbereichen zugeordnet.
Die Klausel WITH TARGET KEY gibt die Parameter für den Zielschlüssel an,
bei denen es sich um die Ausgabe der Schlüsselgenerierungsfunktion handelt,
die in der Klausel GENERATE KEY USING angegeben wurde. Für die
Zielschlüsselspalte wird ein einziger Parameternamen und Datentyp angegeben
und zugeordnet. Dieser Parameter entspricht den Spalten der Tabelle
RETURNS der benutzerdefinierten Tabellenfunktion der Klausel GENERATE KEY
USING.
Die Klausel SEARCH METHODS führt eine oder mehrere für den Index definierte
Suchmethoden ein. Jede Suchmethode besteht aus einem Methodennamen,
Suchargumenten, einer einen Wertebereich erzeugenden Funktion und einer
wahlfreien Indexfilterfunktion. Jede Suchmethode definiert, wie
Indexsuchbereiche für den zugrundeliegenden benutzerdefinierten Index von
einer benutzerdefinierten Tabellenfunktion generiert werden. Darüber
hinaus definiert jede Suchmethode, wie die Indexeinträge in einem bestimmten
Suchbereich durch eine benutzerdefinierte Skalarfunktion weiter qualifiziert
werden können.
- Die Klausel WHEN ordnet einer Suchmethode einen Kennsatz zu. Bei
dem Kennsatz handelt es sich um eine SQL-Kennung, die sich auf den in der
Indexausnutzungsregel angegebenen Methodennamen bezieht. (Diese Regel
wurde in der Klausel PREDICATES einer benutzerdefinierten Funktion
lokalisiert.) Einer oder mehrere Parameternamen und Datentypen werden
zur Verwendung als Argumente in der Bereichsfunktion und/oder der
Indexfilterfunktion angegeben. Die Klausel WHEN gibt die Aktion an, die
vom Optimierungsprogramm durchgeführt werden kann, wenn die Klausel PREDICATES
der Anweisung CREATE FUNCTION mit einer eingehenden Abfrage
übereinstimmt.
- Die Klausel RANGE THROUGH gibt die benutzerdefinierte, externe
Tabellenfunktion an, die zum Generieren der Indexschlüsselbereiche eingesetzt
wird. Hierdurch kann das Optimierungsprogramm das Aufrufen der
zugehörigen UDF vermeiden, wenn sich die Indexschlüssel außerhalb der
zulässigen Schlüsselbereiche befinden.
- Die Klausel FILTER USING bietet eine wahlfreie Möglichkeit zur Angabe
einer benutzerdefinierten, externen Tabellenfunktion oder eines
CASE-Ausdrucks, der zum Filtern von Indexeinträgen verwendet wird, die von der
Funktion zum Generieren von Bereichen zurückgegeben werden. Wenn der
von der Indexfilterfunktion oder dem CASE-Ausdruck zurückgegebene Wert gleich
1 ist, wird die Zeile, die dem Indexeintrag entspricht, aus der Tabelle
abgerufen. Ist der zurückgegebene Wert ungleich 1, wird der
Indexeintrag gelöscht. Diese Funktion ist nützlich, wenn der Aufwand
für den Sekundärfilter im Vergleich zu dem Aufwand für das Bewerten der
ursprünglichen Methode gering ist, und die Auswahlfrequenz des Sekundärfilters
relativ niedrig ist.
Die Indexausnutzung wird bei der Bewertung der Suchmethode
ausgeführt.
Die Anweisung CREATE FUNCTION (externer Skalar) erstellt ein
benutzerdefiniertes Prädikat, das mit den für die Indexerweiterung definierten
Suchmethoden verwendet wird.
Die Klausel PREDICATES identifiziert mit dieser Funktion die Prädikate, die
möglicherweise zur Ausnutzung der Indexerweiterungen eingesetzt werden können
(und die möglicherweise die wahlfreie Klausel SELECTIVITY für die
Suchbedingung des Prädikats verwenden können). Wird die Klausel
PREDICATES angegeben, muß für die Funktion der Wert DETERMINISTIC mit NO
EXTERNAL ACTION definiert werden.
- Die Klausel WHEN ermöglicht eine spezifische Verwendung der zu
definierenden Funktion in einem Prädikat mit einem Vergleichsoperator (=,
>, < etc.) und einer Konstanten bzw. einem Ausdruck (mit
der Klausel EXPRESSION AS). Wenn diese Funktion von einem Prädikat mit
demselben Vergleichsoperator und der angegebenen Konstanten bzw. dem
angegebenen Ausdruck verwendet wird, können die Funktionen für die Filterung
und die Indexausnutzung eingesetzt werden. Die Verwendung einer
Konstanten dient hauptsächlich zur Verarbeitung von booleschen Ausdrücken, bei
denen die Ergebnisart entweder 1 oder 0 ist. In allen anderen Fällen
sollten Sie die Klausel EXPRESSION AS verwenden.
- Die Klausel FILTER USING identifiziert eine Filterfunktion, die zur
Ausführung zusätzlicher Filterungsoperationen für die Ergebnistabelle
eingesetzt werden kann. Es handelt sich hierbei um eine alternative und
schnellere Version der definierten (und im Prädikat verwendeten) Funktion, die
die Anzahl der Zeilen reduziert, für die das benutzerdefinierte Prädikat zur
Feststellung übereinstimmender Zeilen ausgeführt werden muß. Sollten
die durch den Index generierten Ergebnisse sich weitgehend mit den von dem
benutzerdefinierten Prädikat erwarteten Ergebnissen decken, ist die Anwendung
dieser Filterfunktion möglicherweise nicht erforderlich.
- Sie können wahlfrei eine Gruppe von Regeln für die einzelnen Suchmethoden
einer Indexerweiterung definieren, um den Index auszunutzen. Darüber
hinaus können Sie eine Suchmethode in der Indexerweiterung definieren, um die
Suchziele und Suchargumente sowie die Art und Weise zu beschreiben, wie diese
zur Ausführung der Indexsuche eingesetzt werden können.
- Die Klausel SEARCH BY INDEX EXTENSION identifiziert die
Indexerweiterung.
- Die wahlfreie Klausel EXACT gibt an, daß die Indexsuchfunktion bei der
Prädikatbewertung exakte Ergebnisse erzielt. Diese Klausel weist die
Datenbank an, nach der Ausführung der Indexsuchfunktion nicht die
ursprüngliche, vom Benutzer gestellte Prädikatfunktion oder die Filterfunktion
anzuwenden. Wird die Indexsuchfunktion nicht eingesetzt, müssen das
ursprünglich bereitgestellte Prädikat sowie die ursprünglich bereitgestellten
Filterfunktionen angewendet werden. Wird die Klausel EXACT nicht
verwendet, wird das ursprüngliche, vom Benutzer gestellte Prädikat nach der
Ausführung der Indexsuchfunktion angewendet. Das Prädikat EXACT ist
nützlich, wenn die Indexsuchfunktion die gleichen Ergebnisse zurückgibt wie
das Prädikat. Hierdurch wird bei der Abfrageausführung das Anwenden des
benutzerdefinierten Prädikats auf die Ergebnisse der Indexsuchfunktion
verhindert. Wird erwartet, daß der Index nur ein annähernd mit dem
Prädikat übereinstimmendes Ergebnis erzielt, darf die Klausel EXACT nicht
angegeben werden.
- Die Klausel WHEN KEY definiert das Suchziel. Für einen Schlüssel
wird nur ein Suchziel angegeben. Der nach der Klausel WHEN KEY
angegebene Wert identifiziert einen Parameternamen der momentan definierten
Funktion. Diese Klausel wird als "wahr" (true) bewertet, wenn die Werte
des benannten Parameters für Spalten stehen, die von einem Index abgedeckt
werden, der auf der angegebenen Indexerweiterung basiert.
- Die Klausel USE definiert das Suchargument. Das Suchargument
identifiziert, welche der in der Indexerweiterung definierte Methode verwendet
werden soll. Der hier angegebene Methodenname muß mit einer Methode
übereinstimmen, die in der Indexerweiterung definiert ist. Der
bzw. die Parameterwerte identifizieren Parameternamen der momentan
definierten Funktion. Sie dürfen mit keinem der Parameternamen
übereinstimmen, die im Suchziel angegeben wurden. Die Anzahl der
Parameterwerte und die zugehörigen Datentypen müssen mit den Parametern
übereinstimmen, die für die Methode in der Indexerweiterung definiert
wurden. Für integrierte und einzigartige Datentypen muß eine exakte
Übereinstimmung vorhanden sein, wobei dieselben strukturierten Typen
erforderlich sind.
Im folgenden ist ein Szenario zum Definieren einer Indexerweiterung
aufgeführt:
- Definieren Sie die strukturierten Typen (für Formen). Definieren
Sie mit der Anweisung CREATE TYPE eine Typhierarchie, bei der die Form (shape)
ein übergeordneter Typ und Nullform (nullshape), Punkt (point), Linie (line)
und Vieleck (polygon) untergeordnete Typen sind. Diese strukturierten
Typen dienen zum Modellieren von räumlichen Entitäten. Beispiel:
Der Standort eines Lagerhauses ist ein Punkt, der Verlauf eines Flusses ist
eine Linie und die Grenze eines Geschäftsbereichs ist ein Vieleck. Ein
minimaler Begrenzungsrahmen (mbr) wird hierbei als Attribut verwendet.
Das Attribut 'gtype' gibt an, ob die zugehörige Entität ein Punkt,
eine Linie oder ein Vieleck ist. Geografische Grenzen werden mit den
Attributen 'numpart', 'numpoint' und 'geometry'
modelliert. Alle anderen Attribute werden ignoriert, weil sie für das
aktuelle Szenario keine Rolle spielen.
- Erstellen Sie die Indexerweiterung.
- Erstellen Sie mit der Anweisung CREATE FUNCTION Funktionen, die für die
Schlüsselumsetzung (gridentry), Bereichserstellung (gridrange) und die
Indexfilterung (checkduplicate und mbroverlap) verwendet werden.
- Erstellen Sie mit der Anweisung CREATE INDEX EXTENSION die restlichen
erforderlichen Komponenten des Index.
- Erstellen Sie die Schlüsselumsetzung, die der Indexverwaltungskomponente
eines Indexes entspricht.
CREATE INDEX EXTENSION iename (parm_name datentyp, ...)
FROM SOURCE KEY (parm_name datentyp)
GENERATE KEY USING tabellenfunktionsaufruf
...
Mit der Klausel FROM SOURCE KEY kann der Parameter- und Datentyp der
Schlüsselumsetzung festgestellt werden. Die Klausel GENERATE KEY USING
dient zur Identifizierung der Funktion, die zum Zuordnen des Quellenschlüssels
zu dem von der Funktion generierten Wert verwendet wird.
- Definieren Sie die Funktionen für die Bereichserstellung und die
Indexfilterung, die der Indexsuchkomponente eines Index entsprechen.
CREATE INDEX EXTENSION iename (parm_name datentyp, ...)
...
WITH TARGET KEY
WHEN methodenname (parm_name datentyp, ...)
RANGE THROUGH aufruf_bereichserstellungsfunktion
FILTER USING aufruf_indexfilterfunktion
Mit der Klausel WITH TARGET KEY wird die Suchmethodendefinition
festgestellt. Die Klausel WHEN dient zur Feststellung des
Methodennamens. Die Klausel RANGE THROUGH identifiziert die Funktion,
die zur Eingrenzung des Bereichs für den verwendeten Index eingesetzt
wird. Die Klausel FILTER USING dient zur Feststellung der Funktion, die
zum Eliminieren nicht benötigter Elemente aus den resultierenden Indexwerten
dient.
Anmerkung: | Die Klausel FILTER USING kann anstelle einer Indexfilterfunktion zur
Identifizierung eines CASE-Ausdrucks verwendet werden.
|
- Definieren Sie die Prädikate zur Nutzung der Indexerweiterung.
CREATE FUNCTION within (x shape, y shape)
RETURNS INTEGER
...
PREDICATES
WHEN = 1
FILTER USING mbrWithin (x..mbr..xmin, ...)
SEARCH BY INDEX EXTENSION rastererweiterung
WHEN KEY (parm_name) USE methodenname(parm_name)
Mit der Klausel PREDICATES können Sie ein oder mehrere Prädikate einführen,
die bei jeder Klausel WHEN gestartet werden sollen. Die Klausel WHEN
beginnt die Angabe für das Prädikat mit einem Vergleichsoperator, dem entweder
eine Konstante oder eine Klausel EXPRESSION AS folgt. Die Klausel
FILTER USING identifiziert eine Filterfunktion, die zur Ausführung
zusätzlicher Filterungsoperationen für die Ergebnistabelle eingesetzt werden
kann. Es handelt sich hierbei um eine günstigere Version der
definierten (und im Prädikat verwendeten) Funktion, die die Anzahl der Zeilen
reduziert, für die das benutzerdefinierte Prädikat zur Feststellung
übereinstimmender Zeilen ausgeführt werden muß. Die Klausel SEARCH BY
INDEX EXTENSION gibt an, wo die Indexausnutzung stattfindet. Die
Indexausnutzung definiert die Gruppe von Regeln für die Suchmethode einer
Indexerweiterung, die zur Nutzung des Indexes verwendet werden kann.
Die Klausel WHEN KEY gibt die Ausnutzungsregel an. Die Ausnutzungsregel
beschreibt die Suchziele und -argumente sowie die Art und Weise, wie diese
Elemente zur Ausführung der Indexsuche über eine Suchmethode verwendet werden
können.
- Definieren Sie eine Filterfunktion.
CREATE FUNCTION mbrWithin (...)
Die hier definierte Funktion wird zur Verwendung im Prädikat der
Indexerweiterung erstellt.
Damit das Abfrageoptimierungsprogramm Indizes, die zur Verbesserung der
Abfrageleistung erstellt wurden, erfolgreich nutzen kann, steht die Option
SELECTIVITY für den Funktionsaufruf zur Verfügung. Wenn Sie ungefähr
abschätzen können, wie hoch der Prozentsatz der von einem Prädikat
zurückgegebenen Zeilen ist, können Sie die Option SELECTIVITY beim
Funktionsaufruf verwenden, um die Auswahl eines effizienteren Zugriffspfads
durch das DB2-Optimierungsprogramm zu vereinfachen.
Im folgenden Beispiel berechnet die benutzerdefinierte Funktion
within (auf der Basis des ersten und zweiten Parameters) das
Zentrum und den Radius und erstellt eine Anweisungsfolge mit einer
entsprechenden Selektivität:
SELECT * FROM customer
WHERE within(loc, circle(100, 100, 10) = 1 SELECTIVITY .05
In diesem Beispiel filtert das angegebene Prädikat
(SELECTIVITY .05) 95 % der Zeilen in der Tabelle
customer aus.
[ Seitenanfang | Vorherige Seite | Nächste Seite | Inhaltsverzeichnis | Index ]