Erstellen von Indizes mit eingeschlossenen Spalten
In diesem Thema wird beschrieben, wie eingeschlossene Spalten (oder Nichtschlüsselspalten) hinzugefügt werden, um die Funktionalität von nicht gruppierten Indizes in SQL Server 2012 mithilfe von SQL Server Management Studio oder Transact-SQL zu erweitern. Indem Sie Nichtschlüsselspalten einschließen, erstellen Sie nicht gruppierte Indizes, die eine größere Anzahl von Abfragen abdecken. Dies ist der Fall, weil Nichtschlüsselspalten die folgenden Vorteile aufweisen:
Es kann sich um Datentypen handeln, die als Indexschlüsselspalten nicht zulässig sind.
Sie werden von Database Engine (Datenbankmodul) beim Berechnen der Indexschlüsselspalten oder Indexschlüsselgröße nicht berücksichtigt.
Ein Index mit Nichtschlüsselspalten kann die Abfrageleistung erheblich steigern, wenn alle Spalten in der Abfrage in den Index als Schlüssel- oder Nichtschlüsselspalten eingeschlossen werden. Leistungsvorteile werden erzielt, weil der Abfrageoptimierer alle Spaltenwerte im Index finden kann; auf Daten der Tabelle oder des gruppierten Indexes wird nicht zugegriffen, sodass als Ergebnis weniger Datenträger-E/A-Vorgänge auftreten.
Hinweis |
---|
Wenn ein Index alle Spalten enthält, auf die eine Abfrage verweist, wird dies normalerweise als Abdecken der Abfrage bezeichnet. |
In diesem Thema
Vorbereitungen:
Entwurfsempfehlungen
Einschränkungen
Sicherheit
So erstellen Sie einen Index mit Nichtschlüsselspalten mit:
SQL Server Management Studio
Transact-SQL
Vorbereitungen
Entwurfsempfehlungen
Überarbeiten Sie nicht gruppierte Indizes mit großen Indexschlüsseln so, dass nur Spalten, die für Suchen und Suchvorgänge verwendet werden, Schlüsselspalten sind. Erklären Sie alle anderen Spalten, die die Abfrage abdecken, zu Nichtschlüsselspalten. Auf diese Weise sind alle Spalten vorhanden, die zum Abdecken der Abfrage erforderlich sind, der Indexschlüssel selbst ist jedoch klein und effizient.
Schließen Sie Nichtschlüsselspalten in einen nicht gruppierten Index ein, damit die Größenbegrenzungen des aktuellen Indexes von maximal 16 Schlüsselspalten und einer maximalen Größe des Indexschlüssels von 900 Byte nicht überschritten werden. Nichtschlüsselspalten werden von Database Engine (Datenbankmodul) beim Berechnen der Indexschlüsselspalten oder Indexschlüsselgröße nicht berücksichtigt.
Einschränkungen
Nichtschlüsselspalten können nur für nicht gruppierte Indizes definiert werden.
Alle Datentypen außer text, ntext und image können als Nichtschlüsselspalten verwendet werden.
Berechnete Spalten, die deterministisch und entweder präzise oder unpräzise sind, können als Nichtschlüsselspalten verwendet werden. Weitere Informationen finden Sie unter Indizes in berechneten Spalten.
Berechnete Spalten, die aus den Datentypen image, ntext und text abgeleitet werden, können Nichtschlüsselspalten sein, wenn der Datentyp der berechneten Spalte als Nichtschlüssel-Indexspalte zulässig ist.
Nichtschlüsselspalten können nur aus einer Tabelle gelöscht werden, wenn der Index der Tabelle zuvor gelöscht wird.
Nichtschlüsselspalten können nur zum Ausführen der folgenden Aufgaben geändert werden:
Ändern der NULL-Zulässigkeit der Spalte von NOT NULL in NULL.
Vergrößern der Länge von varchar-, nvarchar- oder varbinary-Spalten.
Sicherheit
Berechtigungen
Erfordert die ALTER-Berechtigung für die Tabelle oder Sicht. Der Benutzer muss ein Mitglied der festen Serverrolle sysadmin bzw. der festen Datenbankrollen db_ddladmin und db_owner sein.
[Top]
Verwendung von SQL Server Management Studio
So erstellen Sie einen Index mit Nichtschlüsselspalten
Klicken Sie im Objekt-Explorer auf das Pluszeichen, um die Datenbank zu erweitern, die die Tabelle enthält, in der Sie einen Index mit Nichtschlüsselspalten erstellen möchten.
Klicken Sie auf das Pluszeichen, um den Ordner Tabellen zu erweitern.
Klicken Sie auf das Pluszeichen, um die Tabelle zu erweitern, für die Sie einen Index mit Nichtschlüsselspalten erstellen möchten.
Klicken Sie mit der rechten Maustaste auf den Ordner Index, zeigen Sie auf Neuer Index, und wählen Sie Nicht gruppierter Index… aus.
Geben Sie in das Dialogfeld Neuer Index auf der Seite Allgemein den Namen des neuen Indexes in das Feld Indexname ein.
Klicken Sie auf der Registerkarte Indexschlüsselspalten auf Hinzufügen….
Aktivieren Sie im Dialogfeld Spalten auswählen aus table_name das oder die Kontrollkästchen der Tabellenspalte oder der Spalten, die dem Index hinzugefügt werden sollen.
Klicken Sie auf OK.
Klicken Sie auf der Registerkarte Eingeschlossene Spalten auf Hinzufügen….
Aktivieren Sie im Dialogfeld Spalten auswählen aus table_name das oder die Kontrollkästchen der Tabellenspalte oder der Spalten, die dem Index als Nichtschlüsselspalten hinzugefügt werden sollen.
Klicken Sie auf OK.
Klicken Sie im Dialogfeld Neuer Index auf OK.
[Top]
Verwendung von Transact-SQL
So erstellen Sie einen Index mit Nichtschlüsselspalten
Stellen Sie im Objekt-Explorer eine Verbindung zu einer Instanz von Database Engine (Datenbankmodul) her.
Klicken Sie in der Standardleiste auf Neue Abfrage.
Kopieren Sie das folgende Beispiel, fügen Sie es in das Abfragefenster ein, und klicken Sie auf Ausführen.
USE AdventureWorks2012; GO -- Creates a nonclustered index on the Person.Address table with four included (nonkey) columns. -- index key column is PostalCode and the nonkey columns are -- AddressLine1, AddressLine2, City, and StateProvinceID. CREATE NONCLUSTERED INDEX IX_Address_PostalCode ON Person.Address (PostalCode) INCLUDE (AddressLine1, AddressLine2, City, StateProvinceID); GO
Weitere Informationen finden Sie unter CREATE INDEX (Transact-SQL).
[Top]