DB2 Universal Database - Systemverwaltung


Erstellen einer benutzerdefinierten erweiterten Indexart

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:

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:

Details zur Indexverwaltung

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.

Details zur Indexsuche

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.

Details zur Indexausnutzung

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.

Szenario zum Definieren einer Indexerweiterung

Im folgenden ist ein Szenario zum Definieren einer Indexerweiterung aufgeführt:

  1. 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.
  2. Erstellen Sie die Indexerweiterung.
  3. 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.

  4. 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.

  5. 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.

  6. 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 ]