Erstellt einen Index für eine angegebene Tabelle.
CREATE [ UNIQUE ] INDEX [ IF NOT EXISTS ] [ index-name ] ON table-name ( ordered-column-list ) [ WITH MAX HASH SIZE integer ]
ordered-column-list : ( column-name [ ASC | DESC ], ... )
UNIQUE Das UNIQUE-Attribut stellt sicher, dass in der Tabelle keine zwei Zeilen vorhanden sind, die in allen Indexspalten identische Werte aufweisen. Jeder Indexschlüssel muss eindeutig sein oder NULL in mindestens einer Spalte enthalten.
Es besteht ein Unterschied zwischen einer Eindeutigkeits-Integritätsregel in einer Tabelle 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.
Wenn die Spalten in einer eindeutigen Integritätsregel während einer Aktualisierung geändert werden und ein Fremdschlüssel diese eindeutige Integritätsregel referenziert, werden Zeilen, die keine Zeilen in der eindeutigen Regel referenzieren, aus der entfernten Datenbank gelöscht.
IF NOT EXISTS-Klausel Wenn das Attribut IF NOT EXISTS angegeben wurde und der benannte Index bereits vorhanden ist, werden keine Änderungen vorgenommen und es wird kein Fehler zurückgegeben.
ordered-column-list Eine sortierte Liste von Spalten. Spaltenwerte im Index können in aufsteigender oder absteigender Reihenfolge sortiert werden.
WITH MAX HASH SIZE Legt die Hash-Größe (in Byte) für diesen Index fest. Dieser Wert setzt den Standardwert der Eigenschaft MaxHashSize außer Kraft, der für die Datenbank gilt. Weitere Hinweise zur Standardgröße finden Sie unter Lesen der Datenbankeigenschaften.
UltraLite erstellt automatisch Indizes für Primärschlüssel und Eindeutigkeits-Integritätsregeln.
Indizes können die Abfrageperformance steigern, indem sie es UltraLite ermöglichen, bestimmte Zeilen schnell zu finden. Im Gegensatz dazu können Indizes die Synchronisation sowie INSERT-, DELETE- und UPDATE-Anweisungen verlangsamen, da sie verwaltet werden müssen.
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 wurde, wird er nie wieder in einer SQL-Anweisung referenziert, außer wenn er mit DROP INDEX gelöscht wird.
Indizes brauchen Speicherplatz in der Datenbank. Der zusätzliche Aufwand für die Verwaltung der Indizes kann die Performance der Datenänderungsvorgänge beeinträchtigen. Aus diesem Grund sollten Sie nur Indizes erstellen, die die Abfrageperformance verbessern.
UltraLite verarbeitet keine Anforderungen oder Abfragen, die die Tabelle referenzieren, während die Anweisung CREATE INDEX ausgeführt wird. Außerdem ist es nicht möglich, CREATE INDEX auszuführen, wenn die Datenbank aktive Abfragen oder nicht festgeschriebene Transaktionen enthält.
UltraLite kann für Entwickler Ausführungspläne zur Optimierung von Abfragen zur Verfügung stellen. Siehe Ausführungspläne in UltraLite.
Für UltraLite.NET-Benutzer: Sie können diese Anweisung nur ausführen, wenn Sie auch die Dispose-Methode für alle Datenobjekte ausführen (z.B. ULDataReader). Siehe ULBulkCopy.Dispose-Methode [UltraLite.NET].
Anweisungen werden nicht freigegeben, wenn gleichzeitig Schemaänderungen initiiert werden. Siehe UltraLite-Datenbankschemas.
Im folgenden Beispiel wird ein zweispaltiger Index für die Tabelle Employee erstellt.
CREATE INDEX employee_name_index ON Employees ( Surname, GivenName ) |
Die folgende Anweisung erstellt einen Index auf der SalesOrderItems-Tabelle für die ProductID-Spalte.
CREATE INDEX item_prod ON SalesOrderItems ( ProductID ) |
Das folgende Szenario zeigt die Auswirkungen von MAX HASH SIZE in einer UltraLite Java Edition-Datenbank, sofern eine Tabelle "Employees" eine Spalte "Initials" mit dem Typ VARCHAR( 3) sowie eine Spalte EmployeeID mit dem Typ TINY enthält.
Die folgende Anweisung zerlegt alle Werte vollständig, wenn nur ASCII7-Zeichen benutzt werden:
CREATE INDEX ascii_a ON Employees( Initials ) WITH MAX HASH SIZE 3 |
Die folgende Anweisung zerlegt alle Werte vollständig, unabhängig von den enthaltenen Zeichen:
CREATE INDEX unicode_a ON Employees( Initials ) WITH MAX HASH SIZE 9 |
Die folgende Anweisung zerlegt nur die "Initials"-Werte, auch wenn nur ASCII-Zeichen benutzt werden, da die ersten 9 Byte für "Initials" reserviert sind:
CREATE INDEX compound_1 ON Employees( Initials, EmployeeID ) WITH MAX HASH SIZE 9 |
Die folgende Anweisung zerlegt sowohl die Werte in "Initials" als auch in "EmployeeID":
CREATE INDEX compound_2 ON Employees( Initials, EmployeeID ) WITH MAX HASH SIZE 10 |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |