Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Referenzhandbuch » Verwendung von SQL » SQL-Anweisungen » SQL-Anweisungen (A-D)

 

CREATE INDEX-Anweisung

Mit dieser Anweisung erstellen Sie einen Index für eine angegebene Tabelle oder materialisierte Ansicht. Indizes können die Performance der Datenbank verbessern.

Syntax 1 - Einen Index für eine Tabelle erstellen
CREATE [ VIRTUAL ] [ UNIQUE ] [ CLUSTERED ] INDEX Indexname
  ON [ Eigentümer.]Tabellenname
    ( Spaltenname [ ASC | DESC ], ...
      | Funktionsname ( Argument, ... ] ) AS Spaltenname )
  [ { IN | ON } DBSpace-Name ]
  [ FOR OLAP WORKLOAD ]
Syntax 2 - Einen Index für eine materialisierte Ansicht erstellen
CREATE [ VIRTUAL ] [ UNIQUE ] [ CLUSTERED ] INDEX Indexname
  ON [ Eigentümer.]Materialisierte_Ansicht_Name
    ( Spaltenname [ ASC | DESC ], ...)
  [ { IN | ON } DBSpace-Name ]
  [ FOR OLAP WORKLOAD ]
Parameter
  • VIRTUAL-Klausel   Das Schlüsselwort VIRTUAL wird hauptsächlich für den Indexberater verwendet. Ein virtueller Index ahmt die Eigenschaften des richtigen physischen Indexes nach, während die Ausführungspläne durch den Indexberater ausgewertet werden und wenn die PLAN-Funktion verwendet wird. Sie können virtuelle Indizes mit der PLAN-Funktion verwenden, um die Auswirkungen eines Indexes auf die Performance zu testen, ohne die zeit- und ressourcenraubende Erstellung eines tatsächlichen Indexes vornehmen zu müssen.

    Virtuelle Indizes sind für andere Verbindungen nicht sichtbar und werden gelöscht, wenn die Verbindung getrennt wird. Virtuelle Indizes werden bei der Auswertung von Plänen für die tatsächliche Durchführung von Abfragen nicht verwendet und wirken sich daher nicht negativ auf die Performance aus.

    Virtuelle Indizes sind auf vier Spalten begrenzt.

    Weitere Hinweise finden Sie unter Empfehlungen des Indexberaters für eine Abfrage abrufen und Indexberater.

  • CLUSTERED-Klausel   Das CLUSTERED-Attribut sorgt dafür, dass Zeilen in etwa in der Schlüsselreihenfolge des entsprechenden Indexes gespeichert werden. Der Datenbankserver versucht die Speicherreihenfolge der Zeilen in Schlüsselreihenfolge zu halten, kann dies aber nicht vollständig garantieren.

    Wenn ein Clustered-Index existiert, fügt die LOAD TABLE-Anweisung Zeilen in der Reihenfolge des Indexschlüssels ein. Die INSERT-Anweisung versucht, neue Zeilen auf derselben Seite einzufügen, die benachbarte Zeilen bezüglich der Schlüsselreihenfolge enthält.

    Weitere Hinweise finden Sie unter Clustered-Indizes verwenden.

  • UNIQUE-Klausel   Das Attribut UNIQUE stellt sicher, dass in der Tabelle oder materialisierten Ansicht keine zwei Zeilen mit identischen Werten in den Indexspalten vorhanden sind. Jeder Indexschlüssel muss eindeutig sein oder NULL in mindestens einer Spalte enthalten.

    Es besteht ein Unterschied zwischen einer Eindeutigkeits-Integritätsregel und einem eindeutigen Index. Spalten mit einem eindeutigen Index lassen NULL zu, nicht aber Spalten in einer Eindeutigkeits-Integritätsregel. Ein Fremdschlüssel kann entweder einen Primärschlüssel oder eine Eindeutigkeits-Integritätsregel referenzieren, aber keinen eindeutigen Index, da dieser mehrere Instanzen von NULL enthalten kann.

    Es wird empfohlen, keine angenäherten Datentypen wie FLOAT und DOUBLE für Primärschlüssel oder Spalten in Eindeutigkeits-Integritätsregeln zu verwenden. Bei angenäherten nummerischen Datentypen können nach arithmetischen Vorgängen Rundungsfehler auftreten.

  • ASC | DESC-Klausel   Spalten werden in aufsteigender (erhöhender) Reihenfolge sortiert, es sei denn, absteigend (DESC) wird explizit angegeben. Ein Index wird sowohl für eine aufsteigende als auch für eine absteigende ORDER BY-Klausel verwendet, je nachdem, ob der Index aufsteigend oder absteigend war. Wenn jedoch ORDER BY mit gemischten Attributen (aufsteigend und absteigend) ausgeführt wird, wird ein Index nur verwendet, wenn der Index mit denselben aufsteigenden und absteigenden Attributen erstellt wurde.

  • Funktionsname   Die Funktionsname-Klausel erstellt einen Index für eine Funktion. Diese Klausel kann nicht für deklarierte temporäre Tabellen oder materialisierte Ansichten verwendet werden.

    Diese Form einer CREATE INDEX-Anwendung ist eine bequeme Methode zur Durchführung folgender Vorgänge:

    1. Hinzufügen einer berechneten Spalte namens Spaltenname zur Tabelle. Die Spalte ist mit einer COMPUTE-Klausel definiert, die die angegebene Funktion und alle angegebenen Argumente enthält. Unter der COMPUTE-Klausel der CREATE TABLE-Anweisung finden Sie Hinweise zu Einschränkungen beim Funktionstyp, der angegeben werden kann. Der Datentyp der Spalte basiert auf dem Ergebnistyp der Funktion.

    2. Ausfüllen der berechneten Spalte für die bestehenden Tabellenzeilen

    3. Erstellen eines Indexes für die Spalte

      Das Löschen des Indexes bewirkt nicht das Löschen der zugehörigen berechneten Spalte.

      Weitere Informationen zu berechneten Spalten finden Sie unter Mit berechneten Spalten arbeiten.

  • IN | ON-Klausel   Standardmäßig wird der Index in derselben Datenbankdatei abgelegt wie seine Tabelle oder materialisierte Ansicht. Sie können den Index in einer getrennten Datenbankdatei ablegen, indem Sie einen DBSpace-Namen angeben, unter dem der Index abgelegt werden soll. Diese Funktion ist vor allem bei großen Datenbanken hilfreich, da hiermit Beschränkungen der Dateigröße umgangen werden können, oder bei Performancesteigerungen, die möglicherweise durch die Verwendung von mehreren Festplattengeräten erreicht wird.

    Wenn der neue Index den physischen Index mit einem bestehenden logischen Index gemeinsam nutzen kann, wird die IN-Klausel ignoriert.

    Weitere Hinweise zu Beschränkungen finden Sie unter SQL Anywhere-Einschränkungen von Größe und Anzahl.

  • FOR OLAP WORKLOAD-Klausel   Wenn Sie FOR OLAP WORKLOAD angeben, führt der Datenbankserver bestimmte Optimierungen durch und sammelt Statistiken über den Schlüssel, um die Performance für OLAP-Verarbeitungslasten zu verbessern. Performanceverbesserungen sind besonders gut erkennbar, wenn optimization_workload auf OLAP eingestellt ist. Weitere Hinweise finden Sie unter optimization_workload-Option [Datenbank].

    Weitere Hinweise zu OLAP finden Sie unter OLAP-Unterstützung.

Bemerkungen

Syntax 1 gilt für Tabellen, Syntax 2 für materialisierte Ansichten.

SQL Anywhere verwendet physische und logische Indizes. Ein physischer Index ist die tatsächliche Indexstruktur, wie sie auf der Festplatte gespeichert ist. Ein logischer Index ist eine Referenz auf einen physischen Index. Wenn Sie einen Index erstellen, der in seinen physischen Attributen identisch mit einem bestehenden Index ist, erstellt der Datenbankserver einen logischen Index, der den bestehenden physischen Index mitbenutzt. Im Allgemeinen werden von Ihnen erstellte Indizes als logische Indizes angesehen. Der Datenbankserver erstellt physische Indizes, um logische Indizes zu implementieren, und kann denselben physischen Index gemeinsam für mehrere logische Indizes verwenden. Weitere Hinweise finden Sie unter Indizes mithilfe von logischen Indizes gemeinsam nutzen.

Die CREATE INDEX-Anweisung erstellt einen sortierten Index für die angegebenen Spalten der benannten Tabelle oder materialisierten Ansicht. Indizes werden automatisch verwendet, um die Performance von Abfragen zu verbessern, die von der Datenbank ausgegeben werden, und um Abfragen mithilfe einer ORDER BY-Klausel zu sortieren. Sobald ein Index erstellt ist, wird er nicht mehr in einer SQL-Anweisung referenziert, außer wenn er validiert (VALIDATE INDEX), geändert (ALTER INDEX) oder gelöscht (DROP INDEX) bzw. in einem Hinweis an den Optimierer verwendet wird.

  • Indexeigentümer   In der CREATE INDEX-Anweisung gibt es keine Möglichkeit, den Indexeigentümer anzugeben. Indizes gehören automatisch dem Eigentümer der Tabelle oder materialisierten Ansicht.

  • Indizes für Ansichten   Sie können Indizes für materialisierte Ansichten, aber nicht für normale Ansichten erstellen.

  • Index-Namespace   Der Name jedes Indexes muss für eine gegebene Tabelle oder materialisierte Ansicht eindeutig sein.

  • Exklusive Verwendung   CREATE INDEX wird verhindert, wenn die Anweisung eine Tabelle oder materialisierte Ansicht betrifft, die gerade von einer anderen Verbindung verwendet wird. CREATE INDEX kann zeitaufwändig sein. Der Datenbankserver verarbeitet während der Anweisungsverarbeitung keine Anforderungen hinsichtlich der gleichen Tabelle.

  • Automatisch erstellte Indizes   SQL Anywhere erstellt automatisch Indizes für Primärschlüssel, Fremdschlüssel und Eindeutigkeits-Integritätsregeln. Diese automatisch erstellten Indizes werden in derselben Datenbankdatei aufbewahrt wie die Tabelle.

Diese Anweisung kann nicht ausgeführt werden, wenn mit der WITH HOLD-Klausel geöffnete Cursor vorhanden sind, die entweder Anweisungs- oder Transaktions-Snapshots verwenden. Weitere Hinweise finden Sie unter Snapshot-Isolation.

Berechtigungen

Sie müssen Eigentümer der Tabelle oder materialisierten Ansicht sein oder über DBA- bzw. REFERENCES-Berechtigungen verfügen.

Nebenwirkungen

Automatisches Festschreiben (Autocommit). Die Erstellung eines Indexes für eine integrierte Funktion bewirkt auch einen Checkpoint.

Spaltenstatistiken werden aktualisiert (oder erstellt, falls sie nicht existieren).

Siehe auch
Standards und Kompatibilität
  • SQL/2003   Erweiterung des Herstellers

Beispiel

Erstellung eines zweispaltigen Indexes für die Tabelle Employees

CREATE INDEX employee_name_index
ON Employees
( Surname, GivenName );

Erstellung eines Indexes für die Tabelle SalesOrderItems für die ProductID-Spalte

CREATE INDEX item_prod
ON SalesOrderItems
( ProductID );

Benutzen Sie die SORTKEY-Funktion, um einen Index für die Description-Spalte der Tabelle Products nach russischer Kollatierung sortiert zu erstellen. Die Nebenwirkung ist, dass die Anweisung eine berechnete Spalte namens "desc_ru" zur Tabelle hinzufügt.

CREATE INDEX ix_desc_ru
ON Products (
 SORTKEY( Description, 'rusdict' )
 AS desc_ru );