(0) exportieren Drucken
Alle erweitern
Erweitern Minimieren
Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

CREATE COLUMNSTORE INDEX (Transact-SQL)

Erstellt für eine SQL Server-Tabelle einen nicht gruppierten Columnstore-Index im Arbeitsspeicher. Verwenden Sie einen nicht gruppierten Columnstore-Index, um mithilfe der Columnstore-Komprimierung eine erhebliche Verringerung der Ausführungsdauer beim Abfragen von schreibgeschützten Daten zu erzielen.

Informationen zum Erstellen eines gruppierten Columnstore-Indexes finden Sie unter CREATE CLUSTERED COLUMNSTORE INDEX (Transact-SQL).

Weitere Informationen finden Sie in den folgenden Themen:

Gilt für: SQL Server (SQL Server 2012 bis aktuelle Version. )

Themenlink (Symbol) Transact-SQL-Syntaxkonventionen

Create a non-clustered columnstore index.
CREATE [ NONCLUSTERED ] COLUMNSTORE INDEX index_name 
    ON [database_name. [schema_name ] . | schema_name . ] table_name  
        ( column  [ ,...n ] )
    [ WITH ( <columnstore_index_option> [ ,...n ] ) ]
    [ ON {
        partition_scheme_name ( column_name ) 
        | filegroup_name 
        | "default" 
        } 
    ]
[ ; ]

<columnstore_index_option> ::=
{
      DROP_EXISTING = { ON | OFF }
    | MAXDOP = max_degree_of_parallelism
 }

index_name

Gibt den Namen des Indexes an. index_name muss innerhalb der Tabelle eindeutig sein, kann aber innerhalb der Datenbank mehrfach vorkommen. Indexnamen müssen den Regeln für Bezeichner entsprechen.

Bei einem nicht gruppierten Columnstore-Index:

( column [ ,...n ] )

Gibt die zu speichernden Spalten an. Ein nicht gruppierter columnstore-Index ist auf 1024 Spalten beschränkt.

Jede Spalte muss ein unterstützter Datentyp für columnstore-Indizes sein. Unter Einschränkungen finden Sie eine Liste der unterstützten Datentypen.

ON [database_name. [schema_name ] . | schema_name . ] table_name

Gibt den ein-, zwei- oder dreiteiligen Name der Tabelle an, die den Index enthält.

ON

Diese Optionen geben die Dateigruppen an, für die der Index erstellt wird.

partition_scheme_name ( column_name )

Gibt das Partitionsschema an, das die Dateigruppen definiert, denen die Partitionen eines partitionierten Index zugeordnet werden. Das Partitionsschema muss bereits durch Ausführen von CREATE PARTITION SCHEME in der Datenbank vorhanden sein. column_name gibt die Spalte an, auf deren Grundlage ein partitionierter Index partitioniert wird. Diese Spalte muss mit dem Datentyp, der Länge und der Genauigkeit des Arguments der Partitionierungsfunktion übereinstimmen, die partition_scheme_name verwendet. column_name ist nicht auf Spalten in der Indexdefinition beschränkt. Wenn Sie einen columnstore-Index partitionieren, fügt Database Engine (Datenbankmodul) die Partitionierungsspalte als Spalte des Index hinzu, wenn sie noch nicht angegeben ist.

Wenn partition_scheme_name oder filegroup bei einer partitionierten Tabelle nicht angegeben werden, wird der Index in demselben Partitionsschema platziert und verwendet dieselbe Partitionsspalte wie die zugrunde liegende Tabelle.

Ein columnstore-Index einer partitionierten Tabelle muss über eine Partitionsausrichtung verfügen.

Weitere Informationen zum Partitionieren von Indizes finden Sie unter Partitionierte Tabellen und Indizes.

filegroup_name

Gibt den Namen einer Dateigruppe an, für die der Index erstellt werden soll. Wenn filegroup_name nicht angegeben und die Tabelle nicht partitioniert ist, verwendet der Index die gleiche Dateigruppe wie die zugrunde liegende Tabelle. Die Dateigruppe muss bereits vorhanden sein.

"default"

Erstellt den angegebenen Index für die Standarddateigruppe.

Die Benennung default ist in diesem Kontext kein Schlüsselwort. Er ist ein Bezeichner für die Standarddateigruppe und muss begrenzt sein, wie in ON "default" oder ON [default]. Wenn "default" angegeben wird, muss die Option QUOTED_IDENTIFIER für die aktuelle Sitzung auf ON festgelegt sein. Dies ist die Standardeinstellung. Weitere Informationen finden Sie unter SET QUOTED_IDENTIFIER (Transact-SQL).

DROP_EXISTING

Gibt an, dass der benannte, bereits vorhandene Index gelöscht und neu erstellt wird. Der Standardwert ist OFF.

ON

Der vorhandene Index wird gelöscht und neu erstellt. Der angegebene Indexname muss mit dem Namen eines derzeit vorhandenen Index übereinstimmen. Die Indexdefinition kann jedoch geändert werden. Sie können z. B. andere Spalten oder Indexoptionen angeben.

OFF

Es wird ein Fehler angezeigt, wenn der angegebene Indexname bereits vorhanden ist. Der Indextyp kann nicht mithilfe von DROP_EXISTING geändert werden. In abwärtskompatibler Syntax ist WITH DROP_EXISTING gleichwertig mit WITH DROP_EXISTING = ON.

MAXDOP = max_degree_of_parallelism

Überschreibt die Konfigurationsoption Konfigurieren der Serverkonfigurationsoption Max. Grad an Parallelität für die Dauer des Indexvorgangs. Verwenden Sie MAXDOP, um die Anzahl der bei der Ausführung paralleler Pläne verwendeten Prozessoren einzuschränken. Maximal sind 64 Prozessoren zulässig.

max_degree_of_parallelism-Werte sind:

  • 1 - Unterdrückt die Generierung paralleler Pläne.

  • >1 - Beschränkt die maximale Anzahl der Prozessoren, die bei einem parallelen Indexvorgang verwendet werden, je nach aktueller Systemauslastung auf die angegebene Zahl oder einen niedrigeren Wert. Beispiel: Wenn MAXDOP = 4, beträgt die Anzahl der verwendeten Prozessoren 4 oder weniger.

  • 0 (Standard) - Verwendet abhängig von der aktuellen Systemarbeitsauslastung die tatsächliche Anzahl von Prozessoren oder weniger Prozessoren.

Weitere Informationen finden Sie unter Konfigurieren von Parallelindexvorgängen.

Hinweis Hinweis

Parallele Indexvorgänge sind nicht in jeder Edition von Microsoft SQL Server verfügbar. Eine Liste der Funktionen, die von den Editionen von SQL Server unterstützt werden, finden Sie unter Von den SQL Server 2014-Editionen unterstützte Funktionen.

Erfordert die ALTER-Berechtigung für die Tabelle.

Ein Columnstore-Index kann für eine temporäre Tabelle erstellt werden. Wenn die Tabelle gelöscht oder die Sitzung beendet wird, wird der Index ebenfalls gelöscht.

Wenn eine der Spalten einen Datentyp verwendet, der für Columnstore-Indizes nicht unterstützt wird, müssen Sie diese Spalte aus dem Columnstore-Index ausschließen.

Nicht gruppierte Columnstore-Indizes:

  • Kann nicht mehr als 1024 Spalten enthalten.

  • Eine Tabelle mit einem nicht gruppierten columnstore-Index kann über UNIQUE-, PRIMARY KEY- oder FOREIGN KEY-Einschränkungen verfügen, die Einschränkungen können aber nicht in den nicht gruppierten columnstore-Index eingeschlossen werden.

  • Kann nicht für eine Sicht oder indizierte Sicht erstellt werden.

  • Kann keine Spalte mit geringer Dichte enthalten.

  • Kann nicht mit der ALTER INDEX-Anweisung geändert werden. Um den nicht gruppierten Index zu ändern, müssen Sie stattdessen den columnstore-Index löschen und neu erstellen. Sie können einen columnstore-Index mithilfe von ALTER INDEX deaktivieren und neu erstellen.

  • Kann nicht mit dem INCLUDE-Schlüsselwort erstellt werden.

  • Kann nicht das ASC-Schlüsselwort oder das DESC-Schlüsselwort zum Sortieren des Index enthalten. Columnstore-Indizes werden gemäß den Komprimierungsalgorithmen sortiert. Durch die Sortierung würden viele der Leistungsvorteile entfernt werden.

Jede Spalte in einem columnstore-Index muss einer der folgenden allgemeinen Geschäftsdatentypen sein.

  • datetimeoffset [ ( n ) ]

  • datetime2 [ ( n ) ]

  • datetime

  • smalldatetime

  • date

  • time [ ( n ) ]

  • float [ ( n ) ]

  • real [ ( n ) ]

  • decimal [ ( precision [ , scale ] ) ]

  • money

  • smallmoney

  • bigint

  • int

  • smallint

  • tinyint

  • bit

  • nvarchar [ ( n ) ] except nvarchar (max) is not supported

  • nchar [ ( n ) ]

  • varchar [ ( n ) ]

  • char [ ( n ) ]

  • varbinary [ ( n ) ] except varbinary (max) is not supported

  • binary [ ( n ) ]

Gilt für: SQL Server (SQL Server 2014 bis aktuelle Version).

  • uniqueidentifier

Spalten, die einen der folgenden Datentypen verwenden, können nicht in einem columnstore-Index enthalten sein.

  • ntext, text und image

  • varchar(max) und nvarchar(max)

  • rowversion (und timestamp)

  • sql_variant

  • CLR-Typen (hierarchyid- und räumliche Typen)

  • xml

Gilt für: SQL Server 2012.

  • uniqueidentifier

Columnstore-Indizes können nicht mit den folgenden Funktionen kombiniert werden:

  • Seiten- und Zeilenkomprimierung und vardecimal-Speicherformat (ein Columnstore-Index ist bereits in einem anderen Format komprimiert)

  • Replikation

  • Änderungsnachverfolgung

  • Change Data Capture

  • Filestream

Informationen zu den Leistungsvorteilen und Einschränkungen von Columnstore-Indizes finden Sie unter Beschreibung von Columnstore-Indizes.

Alle Spalten in einem Columnstore-Index werden in den Metadaten als eingeschlossene Spalten gespeichert. Der Columnstore-Index weist keine Schlüsselspalten auf. Diese Systemsichten enthalten Informationen zu Columnstore-Indizes.

[NACH OBEN]

A.Erstellen eines einfachen nicht gruppierten Columnstore-Indexes

Im folgenden Beispiel wird eine einfache Tabelle und ein gruppierter Index erstellt. Anschließend wird die Syntax zum Erstellen eines nicht gruppierten columnstore-Indexes veranschaulicht.

CREATE TABLE SimpleTable
(ProductKey [int] NOT NULL, 
OrderDateKey [int] NOT NULL, 
DueDateKey [int] NOT NULL, 
ShipDateKey [int] NOT NULL);
GO
CREATE CLUSTERED INDEX cl_simple ON SimpleTable (ProductKey);
GO
CREATE NONCLUSTERED COLUMNSTORE INDEX csindx_simple
ON SimpleTable
(OrderDateKey, DueDateKey, ShipDateKey);
GO

B.Erstellen eines einfachen nicht gruppierten Indexes mit allen Optionen

Im folgenden Beispiel wird die Syntax zum Erstellen eines nicht gruppierten Columnstore-Indexes unter Verwendung aller Optionen veranschaulicht.

CREATE NONCLUSTERED COLUMNSTORE INDEX csindx_simple
ON SimpleTable
(OrderDateKey, DueDateKey, ShipDateKey)
WITH (DROP_EXISTING =  ON, 
    MAXDOP = 2)
ON "default"
GO

Ein komplexeres Beispiel mit partitionierten Tabellen finden Sie unter Beschreibung von Columnstore-Indizes.

Ändern der Daten in einem nicht gruppierten Columnstore-Index

Wenn Sie einen nicht gruppierten Columnstore-Index für eine Tabelle erstellen, können Sie die Daten in dieser Tabelle nicht mehr direkt ändern. Eine Abfrage mit INSERT, UPDATE, MERGE oder DELETE schlägt fehl und gibt eine Fehlermeldung zurück. Um Daten in der Tabelle hinzuzufügen oder zu ändern, können Sie eine der folgenden Aktionen ausführen:

  • Deaktivieren oder löschen Sie den Columnstore-Index. Anschließend können Sie die Daten in der Tabelle aktualisieren. Wenn Sie den Columnstore-Index deaktivieren, können Sie den Columnstore-Index nach dem Aktualisieren der Daten neu erstellen. Ein Beispiel:

    ALTER INDEX mycolumnstoreindex ON mytable DISABLE;
    -- update mytable --
    ALTER INDEX mycolumnstoreindex on mytable REBUILD
    
  • Laden Sie Daten in eine Stagingtabelle ohne Columnstore-Index. Erstellen Sie einen Columnstore-Index für die Stagingtabelle. Wechseln Sie für die Stagingtabelle in eine leere Partition der Haupttabelle.

  • Wechseln Sie für eine Partition in der Tabelle mit dem Columnstore-Index in eine leere Stagingtabelle. Wenn die Stagingtabelle über einen Columnstore-Index verfügt, deaktivieren Sie den Columnstore-Index. Nehmen Sie die gewünschten Updates vor. Erstellen bzw. erstellen Sie den Columnstore-Index neu. Wechseln Sie für die Stagingtabelle zurück in die (nun leere) Partition der Haupttabelle.

[NACH OBEN]

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft