Erstellen von Indizes mit eingeschlossenen SpaltenCreate Indexes with Included Columns

DIESES THEMA GILT FÜR:jaSQL Server (ab 2016)jaAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

In diesem Thema wird beschrieben, wie eingeschlossene Spalten (oder Nichtschlüsselspalten) hinzugefügt werden, um die Funktionalität von nicht gruppierten Indizes in SQL ServerSQL Server mithilfe von SQL Server Management StudioSQL Server Management Studio oder Transact-SQLTransact-SQLzu erweitern.This topic describes how to add included (or nonkey) columns to extend the functionality of nonclustered indexes in SQL ServerSQL Server by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL. Indem Sie Nichtschlüsselspalten einschließen, erstellen Sie nicht gruppierte Indizes, die eine größere Anzahl von Abfragen abdecken.By including nonkey columns, you can create nonclustered indexes that cover more queries. Dies ist der Fall, weil Nichtschlüsselspalten die folgenden Vorteile aufweisen:This is because the nonkey columns have the following benefits:

  • Es kann sich um Datentypen handeln, die als Indexschlüsselspalten nicht zulässig sind.They can be data types not allowed as index key columns.

  • Sie werden von DatenbankmodulDatabase Engine beim Berechnen der Indexschlüsselspalten oder Indexschlüsselgröße nicht berücksichtigt.They are not considered by the DatenbankmodulDatabase Engine when calculating the number of index key columns or index key size.

    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.An index with nonkey columns can significantly improve query performance when all columns in the query are included in the index either as key or nonkey columns. 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.Performance gains are achieved because the query optimizer can locate all the column values within the index; table or clustered index data is not accessed resulting in fewer disk I/O operations.

Hinweis

Wenn ein Index alle Spalten enthält, auf die eine Abfrage verweist, wird dies normalerweise als Abdecken der Abfragebezeichnet.When an index contains all the columns referenced by a query it is typically referred to as covering the query.

In diesem ThemaIn This Topic

Vorbereitungen Before You Begin

Entwurfsempfehlungen Design Recommendations

  • Ü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.Redesign nonclustered indexes with a large index key size so that only columns used for searching and lookups are key columns. Erklären Sie alle anderen Spalten, die die Abfrage abdecken, zu Nichtschlüsselspalten.Make all other columns that cover the query into nonkey columns. Auf diese Weise sind alle Spalten vorhanden, die zum Abdecken der Abfrage erforderlich sind, der Indexschlüssel selbst ist jedoch klein und effizient.In this way, you will have all columns needed to cover the query, but the index key itself is small and efficient.

  • Schließen Sie Nichtschlüsselspalten in einen nicht gruppierten Index ein, damit die Größenbegrenzungen des aktuellen Indexes von maximal 32 Schlüsselspalten und einer maximalen Größe des Indexschlüssels von 1,700 Byte (16 Schlüsselspalten und 900 Byte vor SQL Server 2016SQL Server 2016) nicht überschritten werden.Include nonkey columns in a nonclustered index to avoid exceeding the current index size limitations of a maximum of 32 key columns and a maximum index key size of 1,700 bytes (16 key columns and 900 bytes prior to SQL Server 2016SQL Server 2016). Nichtschlüsselspalten werden von DatenbankmodulDatabase Engine beim Berechnen der Indexschlüsselspalten oder Indexschlüsselgröße nicht berücksichtigt.The DatenbankmodulDatabase Engine does not consider nonkey columns when calculating the number of index key columns or index key size.

Einschränkungen Limitations and Restrictions

  • Nichtschlüsselspalten können nur für nicht gruppierte Indizes definiert werden.Nonkey columns can only be defined on nonclustered indexes.

  • Alle Datentypen außer text, ntextund image können als Nichtschlüsselspalten verwendet werden.All data types except text, ntext, and image can be used as nonkey columns.

  • Berechnete Spalten, die deterministisch und entweder präzise oder unpräzise sind, können als Nichtschlüsselspalten verwendet werden.Computed columns that are deterministic and either precise or imprecise can be nonkey columns. Weitere Informationen finden Sie unter Indexes on Computed Columns.For more information, see Indexes on Computed Columns.

  • Berechnete Spalten, die aus den Datentypen image, ntextund text abgeleitet werden, können Nichtschlüsselspalten sein, wenn der Datentyp der berechneten Spalte als Nichtschlüssel-Indexspalte zulässig ist.Computed columns derived from image, ntext, and text data types can be nonkey columns as long as the computed column data type is allowed as a nonkey index column.

  • Nichtschlüsselspalten können nur aus einer Tabelle gelöscht werden, wenn der Index der Tabelle zuvor gelöscht wird.Nonkey columns cannot be dropped from a table unless that table’s index is dropped first.

  • Nichtschlüsselspalten können nur zum Ausführen der folgenden Aufgaben geändert werden:Nonkey columns cannot be changed, except to do the following:

    • Ändern der NULL-Zulässigkeit der Spalte von NOT NULL in NULL.Change the nullability of the column from NOT NULL to NULL.

    • Vergrößern der Länge von varchar-, nvarchar- oder varbinary -Spalten.Increase the length of varchar, nvarchar, or varbinary columns.

Sicherheit Security

Berechtigungen Permissions

Erfordert die ALTER-Berechtigung in der Tabelle oder Sicht.Requires ALTER permission on the table or view. Der Benutzer muss ein Mitglied der festen Serverrolle sysadmin bzw. der festen Datenbankrollen db_ddladmin und db_owner sein.User must be a member of the sysadmin fixed server role or the db_ddladmin and db_owner fixed database roles.

Verwendung von SQL Server Management Studio Using SQL Server Management Studio

So erstellen Sie einen Index mit NichtschlüsselspaltenTo create an index with nonkey columns

  1. 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.In Object Explorer, click the plus sign to expand the database that contains the table on which you want to create an index with nonkey columns.

  2. Klicken Sie auf das Pluszeichen, um den Ordner Tabellen zu erweitern.Click the plus sign to expand the Tables folder.

  3. Klicken Sie auf das Pluszeichen, um die Tabelle zu erweitern, für die Sie einen Index mit Nichtschlüsselspalten erstellen möchten.Click the plus sign to expand the table on which you want to create an index with nonkey columns.

  4. Klicken Sie mit der rechten Maustaste auf den Ordner Index , zeigen Sie auf Neuer Index, und wählen Sie Nicht gruppierter Index…aus.Right-click the Indexes folder, point to New Index, and select Non-Clustered Index….

  5. Geben Sie in das Dialogfeld Neuer Index auf der Seite Allgemein den Namen des neuen Indexes in das Feld Indexname ein.In the New Index dialog box, on the General page, enter the name of the new index in the Index name box.

  6. Klicken Sie auf der Registerkarte Indexschlüsselspalten auf Hinzufügen….Under the Index key columns tab, click Add….

  7. Aktivieren Sie im Dialogfeld Spalten auswählen austable_name das oder die Kontrollkästchen der Tabellenspalte oder der Spalten, die dem Index hinzugefügt werden sollen.In the Select Columns fromtable_name dialog box, select the check box or check boxes of the table column or columns to be added to the index.

  8. Klicken Sie auf OK.Click OK.

  9. Klicken Sie auf der Registerkarte Eingeschlossene Spalten auf Hinzufügen….Under the Included columns tab, click Add….

  10. Aktivieren Sie im Dialogfeld Spalten auswählen austable_name das oder die Kontrollkästchen der Tabellenspalte oder der Spalten, die dem Index als Nichtschlüsselspalten hinzugefügt werden sollen.In the Select Columns fromtable_name dialog box, select the check box or check boxes of the table column or columns to be added to the index as nonkey columns.

  11. Klicken Sie auf OK.Click OK.

  12. Klicken Sie im Dialogfeld Neuer Index auf OK.In the New Index dialog box, click OK.

Verwenden von Transact-SQL Using Transact-SQL

So erstellen Sie einen Index mit NichtschlüsselspaltenTo create an index with nonkey columns

  1. Stellen Sie im Objekt-Explorer **** eine Verbindung mit einer DatenbankmodulDatabase Engine-Instanz her.In Object Explorer, connect to an instance of DatenbankmodulDatabase Engine.

  2. Klicken Sie in der Standardleiste auf Neue Abfrage.On the Standard bar, click New Query.

  3. Kopieren Sie das folgende Beispiel, fügen Sie es in das Abfragefenster ein, und klicken Sie auf Ausführen.Copy and paste the following example into the query window and click Execute.

    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).For more information, see CREATE INDEX (Transact-SQL).