Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à :SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Base de données SQL dans Microsoft Fabric
Convertissez une table rowstore en index columnstore cluster ou créez un index columnstore non cluster. Utilisez un index columnstore pour exécuter efficacement l’analytique opérationnelle en temps réel sur une charge de travail OLTP, ou pour améliorer la compression des données et les performances des requêtes pour les charges de travail d’entreposage de données.
Suivez les nouveautés des index columnstore pour connaître les dernières améliorations apportées à cette fonctionnalité.
Les index columnstore en cluster ordonnés ont été introduits dans SQL Server 2022 (16.x). Pour plus d’informations, consultez CREATE COLUMNSTORE INDEX. Pour connaître la disponibilité des index columnstore ordonnés, consultez index Columnstore : Vue d’ensemble.
À compter de SQL Server 2016 (13.x), vous pouvez créer la table en tant qu’index columnstore cluster. Il n’est plus nécessaire de créer d’abord une table rowstore, puis de la convertir en index columnstore cluster.
Pour plus d’informations sur les instructions de conception d’index columnstore, consultez les index Columnstore - Conseils en matière de conception.
Conventions de la syntaxe Transact-SQL
Syntaxe
Syntaxe pour Azure SQL Database et Azure SQL Managed InstanceAUTD :
-- Create a clustered columnstore index on disk-based table.
CREATE CLUSTERED COLUMNSTORE INDEX index_name
ON { database_name.schema_name.table_name | schema_name.table_name | table_name }
[ ORDER (column [ , ...n ] ) ]
[ WITH ( <with_option> [ , ...n ] ) ]
[ ON <on_option> ]
[ ; ]
-- Create a nonclustered columnstore index on a disk-based table.
CREATE [ NONCLUSTERED ] COLUMNSTORE INDEX index_name
ON { database_name.schema_name.table_name | schema_name.table_name | table_name }
( column [ , ...n ] )
[ ORDER (column [ , ...n ] ) ]
[ WHERE <filter_expression> [ AND <filter_expression> ] ]
[ WITH ( <with_option> [ , ...n ] ) ]
[ ON <on_option> ]
[ ; ]
<with_option> ::=
DROP_EXISTING = { ON | OFF } -- default is OFF
| MAXDOP = max_degree_of_parallelism
| ONLINE = { ON | OFF }
| COMPRESSION_DELAY = { 0 | delay [ MINUTES ] }
| DATA_COMPRESSION = { COLUMNSTORE | COLUMNSTORE_ARCHIVE }
[ ON PARTITIONS ( { partition_number_expression | range } [ , ...n ] ) ]
<on_option>::=
partition_scheme_name ( column_name )
| filegroup_name
| "default"
<filter_expression> ::=
column_name IN ( constant [ , ...n ]
| column_name { IS | IS NOT | = | <> | != | > | >= | !> | < | <= | !< } constant )
Syntaxe pour SQL Server :
-- Create a clustered columnstore index on disk-based table.
CREATE CLUSTERED COLUMNSTORE INDEX index_name
ON { database_name.schema_name.table_name | schema_name.table_name | table_name }
[ WITH ( <with_option> [ , ...n ] ) ]
[ ORDER (column [ , ...n ] ) ]
[ ON <on_option> ]
[ ; ]
-- Create a nonclustered columnstore index on a disk-based table.
CREATE [ NONCLUSTERED ] COLUMNSTORE INDEX index_name
ON { database_name.schema_name.table_name | schema_name.table_name | table_name }
( column [ , ...n ] )
[ ORDER (column [ , ...n ] ) ]
[ WHERE <filter_expression> [ AND <filter_expression> ] ]
[ WITH ( <with_option> [ , ...n ] ) ]
[ ON <on_option> ]
[ ; ]
<with_option> ::=
DROP_EXISTING = { ON | OFF } -- default is OFF
| MAXDOP = max_degree_of_parallelism
| ONLINE = { ON | OFF }
| COMPRESSION_DELAY = { 0 | delay [ MINUTES ] }
| DATA_COMPRESSION = { COLUMNSTORE | COLUMNSTORE_ARCHIVE }
[ ON PARTITIONS ( { partition_number_expression | range } [ , ...n ] ) ]
<on_option>::=
partition_scheme_name ( column_name )
| filegroup_name
| "default"
<filter_expression> ::=
column_name IN ( constant [ , ...n ]
| column_name { IS | IS NOT | = | <> | != | > | >= | !> | < | <= | !< } constant )
Syntaxe pour azure Synapse Analytics and Analytics Platform System (PDW) :
CREATE CLUSTERED COLUMNSTORE INDEX index_name
ON { database_name.schema_name.table_name | schema_name.table_name | table_name }
[ ORDER ( column [ , ...n ] ) ]
[ WITH ( DROP_EXISTING = { ON | OFF } ) ] -- default is OFF
[;]
Disponibilité des versions
Certaines des options ne sont pas disponibles dans toutes les versions du moteur de base de données. Le tableau suivant présente les versions lorsque les options sont introduites dans les index columnstore cluster et non cluster columnstore :
Choix | GROUPÉ | NONCLUSTERED |
---|---|---|
COMPRESSION_DELAY | SQL Server 2016 (13.x) | SQL Server 2016 (13.x) |
COMPRESSION_DE_DONNÉES | SQL Server 2016 (13.x) | SQL Server 2016 (13.x) |
EN LIGNE | SQL Server 2019 (15.x) | SQL Server 2017 (14.x) |
WHERE (clause) | N/A | SQL Server 2016 (13.x) |
Clause ORDER | SQL Server 2016 (13.x) | Préversion de SQL Server 2025 (17.x) |
Toutes les options sont disponibles dans Azure SQL Database et Azure SQL Managed InstanceAUTD.
Pour plus d’informations sur la disponibilité des fonctionnalités, consultez Les nouveautés des index columnstore.
Les arguments
CREATE CLUSTERED COLUMNSTORE INDEX
Créez un index columnstore cluster dans lequel toutes les données sont compressées et stockées par colonne. L’index inclut toutes les colonnes de la table et stocke la table entière. Si la table existante est un segment de mémoire ou un index cluster, elle est convertie en index columnstore cluster. Si la table est déjà stockée en tant qu’index columnstore cluster, l’index existant est supprimé et reconstruit.
Important
Dans la base de données SQL dans Fabric, un index columnstore cluster doit être créé dans le même lot ou transaction que la table à laquelle elle appartient. L’ajout d’un index columnstore cluster à une table après sa création peut entraîner l’erreur suivante :
Msg 35354, Level 16, State 1, Line 63, The statement failed because a clustered columnstore index cannot be created on a table enabled for Change Feed. Consider disabling Change Feed and then creating the clustered columnstore index.
index_name
Spécifie le nom du nouvel index.
Si la table possède déjà un index columnstore cluster, vous pouvez spécifier le même nom que l’index existant, ou vous pouvez utiliser l’option DROP EXISTING pour spécifier un nouveau nom.
ON [ database_name. [ schema_name ] . | schema_name . ] table_name
Spécifie le nom un, deux ou trois parties de la table à stocker en tant qu’index columnstore cluster. Si la table est un tas ou a un index cluster, la table est convertie d’un rowstore en columnstore. Si la table est déjà un columnstore, cette instruction reconstruit l’index columnstore cluster.
ORDER pour columnstore en cluster
Utilisez la column_store_order_ordinal
colonne dans sys.index_columns pour déterminer l’ordre des colonnes d’un index columnstore cluster. L’ordre columnstore aide à éliminer les segments, en particulier avec les données de chaîne. Pour plus d’informations, consultez Réglage des performances avec les index columnstore ordonnés et les index Columnstore - Conseils de conception.
Pour effectuer une conversion en index columnstore cluster ordonné, l’index existant doit être un index columnstore cluster. Utilisez l'option DROP_EXISTING
.
Les types de données métier (les types de données de longueur maximale) ne peuvent pas être la clé d’un index columnstore cluster ordonné.
Lors de la création d’un index columnstore cluster ordonné, utilisez l’option MAXDOP = 1
pour le tri de qualité la plus élevée, en échange d’une durée beaucoup plus longue de l’instruction CREATE INDEX
. Pour créer l’index aussi rapidement que possible, ne limitez pas MAXDOP. La meilleure qualité de compression et de tri peut aider les requêtes sur l’index columnstore.
Pour connaître la disponibilité des index columnstore ordonnés, consultez index Columnstore : Vue d’ensemble.
Options WITH
DROP_EXISTING = [OFF] | SUR
DROP_EXISTING = ON
spécifie de supprimer l’index existant et de créer un index columnstore.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
WITH (DROP_EXISTING = ON);
La valeur par défaut, DROP_EXISTING = OFF, attend que le nom de l’index soit identique au nom existant. Une erreur se produit si le nom d’index spécifié existe déjà.
MAXDOP = max_degree_of_parallelism
Cette option peut remplacer le degré maximal existant de configuration du serveur de parallélisme pendant l’opération d’index. Utilisez MAXDOP pour limiter le nombre de processeurs utilisés dans une exécution de plan parallèle. Le maximum est de 64 processeurs.
max_degree_of_parallelism valeurs peuvent être les suivantes :
- 1, ce qui signifie supprimer la génération de plan parallèle.
- >1, ce qui signifie limiter le nombre maximal de processeurs utilisés dans une opération d’index parallèle au nombre spécifié, ou moins, en fonction de la charge de travail système actuelle. Par exemple, lorsque MAXDOP = 4, le nombre de processeurs utilisés est de 4 ou moins.
- 0 (valeur par défaut), ce qui signifie utiliser le nombre réel de processeurs, ou moins, en fonction de la charge de travail système actuelle.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
WITH (MAXDOP = 2);
Pour plus d’informations, consultez Configuration du serveur : degré maximal de parallélisme et configuration des opérations d’indexparallèles.
COMPRESSION_DELAY = 0 | delay [ MINUTES ]
Pour une table basée sur disque, le délai spécifie le nombre minimal de minutes pendant lesquelles un rowgroup delta dans l’état fermé doit rester dans le rowgroup delta. SQL Server peut ensuite le compresser dans le rowgroup compressé. Étant donné que les tables basées sur disque ne suivent pas les heures d’insertion et de mise à jour sur des lignes individuelles, SQL Server applique le délai aux rowgroups delta dans l’état fermé.
La valeur par défaut est de 0 minutes.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
WITH ( COMPRESSION_DELAY = 10 MINUTES );
Pour obtenir des recommandations sur l’utilisation de COMPRESSION_DELAY, consultez Prise en main de Columnstore pour l’analytique opérationnelle en temps réel.
DATA_COMPRESSION = COLUMNSTORE | COLUMNSTORE_ARCHIVE
Spécifie l’option de compression de données pour la table, le numéro de partition ou la plage de partitions spécifiés. Les options sont les suivantes :
-
COLUMNSTORE
est la valeur par défaut et spécifie de compresser avec la compression columnstore la plus performante. Cette option est le choix classique. -
COLUMNSTORE_ARCHIVE
compresse davantage la table ou la partition à une taille plus petite. Utilisez cette option pour les situations telles que l’archivage, qui nécessite une taille de stockage plus petite et peut se permettre plus de temps pour le stockage et la récupération.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
WITH ( DATA_COMPRESSION = COLUMNSTORE_ARCHIVE );
Pour plus d’informations sur la compression, consultez Compression des données.
ONLINE = [ON | OFF]
-
ON
spécifie que l’index columnstore reste en ligne et disponible, tandis que la nouvelle copie de l’index est générée. -
OFF
spécifie que l’index n’est pas disponible pour une utilisation pendant la génération de la nouvelle copie.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
WITH ( ONLINE = ON );
Options ON
Avec ces options, vous pouvez spécifier des options pour le stockage de données, telles qu’un schéma de partition, un groupe de fichiers spécifique ou le groupe de fichiers par défaut. Si l’option ON n’est pas spécifiée, l’index utilise la partition de paramètres ou les paramètres de groupe de fichiers de la table existante.
partition_scheme_name ( column_name ) spécifie le schéma de partition de la table. Le schéma de partition doit déjà exister dans la base de données. Pour créer le schéma de partition, consultez CREATE PARTITION SCHEME (Transact-SQL).
column_name spécifie la colonne sur laquelle un index partitionné est partitionné. Cette colonne doit correspondre au type de données, à la longueur et à la précision de l’argument de la fonction de partition que partition_scheme_name utilise.
filegroup_name spécifie le groupe de fichiers pour le stockage de l’index columnstore cluster. Si aucun emplacement n’est spécifié et que la table n’est pas partitionnée, l’index utilise le même groupe de fichiers que la table ou la vue sous-jacente. Le groupe de fichiers doit déjà exister.
Pour créer l’index sur le groupe de fichiers par défaut, utilisez "default"
ou [default]
. Si vous spécifiez "default"
, l’option QUOTED_IDENTIFIER
doit être ON
pour la session active.
QUOTED_IDENTIFIER
est ON
par défaut. Pour plus d'informations, consultez SET QUOTED_IDENTIFIER (Transact-SQL).
CREATE [NONCLUSTERED] COLUMNSTORE INDEX
Créez un index columnstore non cluster sur une table rowstore stockée sous la forme d’un segment de mémoire ou d’un index cluster. L’index peut avoir une condition filtrée et n’a pas besoin d’inclure toutes les colonnes de la table sous-jacente. L’index columnstore nécessite suffisamment d’espace pour stocker une copie des données. Vous pouvez mettre à jour l’index et le mettre à jour à mesure que la table sous-jacente est modifiée. L’index columnstore non cluster sur un index cluster active l’analytique en temps réel.
index_name
Spécifie le nom de l’index. index_name doit être unique dans la table, mais ne doit pas être unique dans la base de données. Les noms d’index doivent suivre les règles des identificateurs.
( colonne [ ,... n ] )
Spécifie les colonnes à stocker. Un index columnstore non cluster est limité à 1 024 colonnes.
Chaque colonne doit être d’un type de données pris en charge pour les index columnstore. Consultez limitations et restrictions pour obtenir la liste des types de données pris en charge.
ON [ database_name. [ schema_name ] . | schema_name . ] table_name
Spécifie le nom un, deux ou trois parties de la table qui contient l’index.
ORDER pour columnstore non cluster
Les colonnes spécifiées dans la ORDER
clause d’un index columnstore non cluster doivent être un sous-ensemble des colonnes clés de l’index.
Utilisez la column_store_order_ordinal
colonne dans sys.index_columns pour déterminer l’ordre des colonnes d’un index columnstore non cluster. L’ordre columnstore aide à éliminer les segments, en particulier avec les données de chaîne. Pour plus d’informations, consultez Réglage des performances avec les index columnstore ordonnés et les index Columnstore - Conseils de conception. Les considérations relatives à la conception et aux performances de ces articles s’appliquent généralement aux index columnstore cluster et non cluster.
Les types de données métier (les types de données de longueur maximale) ne peuvent pas être la clé d’un index columnstore non cluster ordonné.
Lors de la création d’un index columnstore non cluster ordonné, utilisez les MAXDOP = 1
options pour le tri de qualité la plus élevée, en échange d’une durée beaucoup plus longue de l’instruction CREATE INDEX
. Pour créer l’index le plus rapidement possible, ne limitez MAXDOP
pas . La meilleure qualité de compression et de tri peut aider les requêtes sur l’index columnstore.
Pour la disponibilité des index columnstore ordonnés, consultez la disponibilité des index columnstore ordonnés.
Options WITH
DROP_EXISTING = [OFF] | SUR
DROP_EXISTING = ON L’index existant est supprimé et reconstruit. Le nom d’index spécifié doit être identique à un index actuellement existant ; toutefois, la définition d’index peut être modifiée. Par exemple, vous pouvez spécifier différentes colonnes ou options d’index.
DROP_EXISTING = OFF
Une erreur s’affiche si le nom d’index spécifié existe déjà. Le type d’index ne peut pas être modifié à l’aide de DROP_EXISTING. Dans la syntaxe compatible descendante, WITH DROP_EXISTING équivaut à WITH DROP_EXISTING = ON.
MAXDOP = max_degree_of_parallelism
Remplace la configuration du serveur : degré maximal de configuration de parallélisme pendant l’opération d’index. Utilisez MAXDOP pour limiter le nombre de processeurs utilisés dans une exécution de plan parallèle. Le maximum est de 64 processeurs.
max_degree_of_parallelism valeurs peuvent être les suivantes :
- 1, ce qui signifie supprimer la génération de plan parallèle.
- >1, ce qui signifie limiter le nombre maximal de processeurs utilisés dans une opération d’index parallèle au nombre spécifié, ou moins, en fonction de la charge de travail système actuelle. Par exemple, lorsque MAXDOP = 4, le nombre de processeurs utilisés est de 4 ou moins.
- 0 (valeur par défaut), ce qui signifie utiliser le nombre réel de processeurs ou moins en fonction de la charge de travail système actuelle.
Pour plus d’informations, consultez Configurer des opérations d’index parallèles.
Remarque
Les opérations d’index parallèles ne sont pas disponibles dans chaque édition de Microsoft SQL Server. Pour obtenir la liste des fonctionnalités prises en charge par les éditions de SQL Server, consultez Éditions et fonctionnalités prises en charge de SQL Server 2022.
ONLINE = [ON | OFF]
-
ON
spécifie que l’index columnstore reste en ligne et disponible, tandis que la nouvelle copie de l’index est générée. -
OFF
spécifie que l’index n’est pas disponible pour une utilisation pendant la génération de la nouvelle copie. Dans un index non cluster, la table de base reste disponible. Seul l’index columnstore non cluster n’est pas utilisé pour satisfaire les requêtes tant que le nouvel index n’est pas terminé.
CREATE COLUMNSTORE INDEX ncci ON Sales.OrderLines (StockItemID, Quantity, UnitPrice, TaxRate)
WITH ( ONLINE = ON );
COMPRESSION_DELAY = 0 | delay [ MINUTES ]
Spécifie une limite inférieure sur la durée pendant laquelle une ligne doit rester dans un rowgroup delta, avant qu’elle ne soit éligible à la migration vers un rowgroup compressé. Par exemple, vous pouvez dire que si une ligne n’est pas modifiée pendant 120 minutes, cette ligne est éligible à la compression dans le format de stockage en colonnes.
Pour un index columnstore sur des tables sur disque, l’heure à laquelle une ligne a été insérée ou mise à jour n’est pas suivie. Au lieu de cela, l’heure de fermeture du rowgroup delta est utilisée comme proxy pour la ligne. La durée par défaut est de 0 minutes. Une ligne est migrée vers le stockage en colonnes après 1 million de lignes cumulées dans le rowgroup delta, et elle est marquée comme fermée.
COMPRESSION_DE_DONNÉES
Spécifie l’option de compression de données pour la table, le numéro de partition ou la plage de partitions spécifiés. S’applique uniquement aux index columnstore, y compris les index non cluster et non cluster. Les options sont les suivantes :
-
COLUMNSTORE
est la valeur par défaut et spécifie de compresser avec la compression columnstore la plus performante. Cette option est le choix classique. -
COLUMNSTORE_ARCHIVE
compresse davantage la table ou la partition à une taille plus petite. Vous pouvez utiliser cette option pour l’archivage ou pour d’autres situations qui nécessitent une taille de stockage plus petite et peuvent se permettre plus de temps pour le stockage et la récupération.
Pour plus d’informations sur la compression, consultez Compression des données.
WHERE <filter_expression> [ AND <filter_expression> ]
Appelée prédicat de filtre, cette option spécifie les lignes à inclure dans l’index. SQL Server crée des statistiques filtrées sur les lignes de données de l’index filtré.
Le prédicat de filtre utilise une logique de comparaison simple. Les comparaisons qui utilisent NULL
des littéraux ne sont pas autorisées avec les opérateurs de comparaison. Utilisez plutôt les opérateurs et IS NULL
les IS NOT NULL
opérateurs.
Voici quelques exemples de prédicats de filtre pour la Production.BillOfMaterials
table :
WHERE StartDate > '20000101' AND EndDate <= '20000630'
WHERE ComponentID IN (533, 324, 753)
WHERE StartDate IN ('20000404', '20000905') AND EndDate IS NOT NULL
Pour obtenir des conseils sur les index filtrés, consultez Créer des index filtrés.
Options ON
Les options suivantes spécifient les groupes de fichiers sur lesquels l’index est créé.
partition_scheme_name ( column_name )
Spécifie le schéma de partition qui définit les groupes de fichiers sur lesquels les partitions d’un index partitionné sont mappées. Le schéma de partition doit exister dans la base de données en exécutant CREATE PARTITION SCHEME.
column_name spécifie la colonne sur laquelle un index partitionné est partitionné. Cette colonne doit correspondre au type de données, à la longueur et à la précision de l’argument de la fonction de partition que partition_scheme_name utilise. column_name n’est pas limité aux colonnes de la définition d’index. Lors du partitionnement d’un index columnstore, le moteur de base de données ajoute la colonne de partitionnement en tant que colonne de l’index, s’il n’est pas déjà spécifié.
Si la table est partitionnée et que partition_scheme_nameou groupe de fichiers ne sont pas spécifiés, l’index est placé dans le même schéma de partition et utilise la même colonne de partitionnement que la table sous-jacente.
Un index columnstore sur une table partitionnée doit être aligné sur la partition. Pour plus d’informations sur le partitionnement des index, consultez tables et index partitionnés.
filegroup_name
Spécifie un nom de groupe de fichiers sur lequel créer l’index. Si filegroup_name n’est pas spécifié et que la table n’est pas partitionnée, l’index utilise le même groupe de fichiers que la table sous-jacente. Le groupe de fichiers doit déjà exister.
« valeur par défaut »
Crée l’index spécifié sur le groupe de fichiers par défaut.
Le terme par défaut, dans ce contexte, n’est pas un mot clé. Il s’agit d’un identificateur pour le groupe de fichiers par défaut et doit être délimité, comme dans ON "default"
ou ON [default]
. Si "default"
elle est spécifiée, l’option QUOTED_IDENTIFIER doit être ACTIVÉE pour la session active, qui est le paramètre par défaut. Pour plus d’informations, consultez SET QUOTED_IDENTIFIER.
Autorisations
Nécessite l’autorisation ALTER sur la table.
Remarques
Vous pouvez créer un index columnstore sur une table temporaire. Lorsque la table est supprimée ou que la session se termine, l’index est également supprimé.
Dans la base de données Sql Fabric, les tables avec des index columnstore en cluster ne sont pas mises en miroir sur Fabric OneLake.
Index filtrés
Un index filtré est un index optimisé, non cluster, adapté aux requêtes qui sélectionnent un petit pourcentage de lignes d’une table. Il utilise un prédicat de filtre pour indexer une partie des données de la table. Un index filtré bien conçu peut améliorer les performances des requêtes, réduire les coûts de stockage et réduire les coûts de maintenance.
Options SET requises pour les index filtrés
Les options SET de la colonne de valeur requise sont requises chaque fois que l’une des conditions suivantes se produit :
- Vous créez un index filtré.
- Une opération INSERT, UPDATE, DELETE ou MERGE modifie les données dans un index filtré.
- L’optimiseur de requête utilise l’index filtré pour produire le plan de requête.
Options définies | Valeur requise | Valeur du serveur par défaut | Valeur OLE DB et ODBC par défaut | Valeur de DB-Library par défaut |
---|---|---|---|---|
ANSI_NULLS | ACTIVÉ | ACTIVÉ | ACTIVÉ | ÉTEINT |
ANSI_PADDING | ACTIVÉ | ACTIVÉ | ACTIVÉ | ÉTEINT |
ANSI_WARNINGS 1 | ACTIVÉ | ACTIVÉ | ACTIVÉ | ÉTEINT |
ARITHABORT | ACTIVÉ | ACTIVÉ | ÉTEINT | ÉTEINT |
CONCAT_NULL_YIELDS_NULL | ACTIVÉ | ACTIVÉ | ACTIVÉ | ÉTEINT |
NUMERIC_ROUNDABORT | ÉTEINT | ÉTEINT | ÉTEINT | ÉTEINT |
IDENTIFIANT_CITÉ | ACTIVÉ | ACTIVÉ | ACTIVÉ | ÉTEINT |
1 Définition ANSI_WARNINGS sur ON définit implicitement ARITHABORT sur ON lorsque le niveau de compatibilité de la base de données est défini sur 90 ou version ultérieure. Si le niveau de compatibilité de la base de données est défini sur 80 ou version antérieure, vous devez définir explicitement l’option ARITHABORT sur ON.
Si les options SET sont incorrectes, les conditions suivantes peuvent se produire :
L’index filtré n’est pas créé.
Le moteur de base de données génère une erreur et restaure les instructions INSERT, UPDATE, DELETE ou MERGE qui modifient les données dans l’index.
L’optimiseur de requête ne prend pas en compte l’index dans le plan d’exécution pour les instructions Transact-SQL.
Pour plus d’informations sur les index filtrés, consultez Créer des index filtrés.
Limitations et restrictions
Chaque colonne d’un index columnstore doit être de l’un des types de données métiers courants suivants :
- datetimeoffset [ ( n ) ]
- datetime2 [ ( n ) ]
- datetime
- smalldatetime
- date
- time [ ( n ) ]
- float [ ( n ) ]
- real [ ( n ) ]
- décimal [ ( précision [ , échelle ] ) ]
- numeric [ ( precision [ , scale ] ) ]
- argent
- smallmoney
- bigint
- Int
- smallint
- tinyint
- mors
- nvarchar [ ( n ) ]
- nvarchar(max)1
- nchar [ ( n ) ]
- varchar [ ( n ) ]
- varchar(max)1
- char [ ( n ) ]
- varbinary [ ( n ) ]
- varbinary(max)1
- binary [ ( n ) ]
- uniqueidentifier2
1 S’applique à SQL Server 2017 (14.x) et Azure SQL Database au niveau Premium, au niveau Standard (S3 et versions ultérieures) et à tous les niveaux d’offres vCore, uniquement dans les index columnstore en cluster.
2 S’applique à SQL Server 2014 (12.x) et versions ultérieures.
Si la table sous-jacente a une colonne d’un type de données qui n’est pas pris en charge pour les index columnstore, vous devez omettre cette colonne de l’index columnstore non cluster.
Les données d’objet volumineux (LOB) supérieures à 8 kilo-octets sont stockées dans le stockage hors ligne, le stockage métier, avec simplement un pointeur vers l’emplacement physique stocké dans le segment de colonne. La taille des données stockées n’est pas signalée dans sys.column_store_segments, sys.column_store_dictionaries ou sys.dm_db_column_store_row_group_physical_stats.
Les colonnes qui utilisent l’un des types de données suivants ne peuvent pas être incluses dans un index columnstore :
- ntext, texte et image
- nvarchar(max), varchar(max), et varbinary(max)1
- rowversion (et timestamp)
- sql_variant
- Types CLR (types hierarchyid et spatial)
- xml
- uniqueidentifier2
1 S’applique à SQL Server 2016 (13.x) et aux versions antérieures, ainsi qu’aux index columnstore non cluster.
2 S’applique à SQL Server 2012 (11.x).
Index columnstore non cluster :
- Impossible d’avoir plus de 1 024 colonnes.
- Impossible de créer un index basé sur des contraintes. Il est possible d’avoir des contraintes uniques, des contraintes de clé primaire et des contraintes de clé étrangère sur une table avec un index columnstore. Les contraintes sont toujours appliquées avec un index de magasin de lignes. Les contraintes ne peuvent pas être appliquées avec un index columnstore (clustered ou non cluster).
- Impossible d’inclure une colonne éparse.
- Impossible de modifier à l’aide de l’instruction ALTER INDEX. Pour modifier l’index non cluster, vous devez supprimer et recréer l’index columnstore à la place. Vous pouvez utiliser ALTER INDEX pour désactiver et reconstruire un index columnstore.
- Impossible de créer à l’aide du mot clé INCLUDE.
- Impossible de spécifier les mots clés ou
ASC
lesDESC
mots clés dans la liste des colonnes d’index. Les index Columnstore sont classés en fonction des algorithmes de compression. - Dans Azure SQL Database, la base de données SQL dans Microsoft Fabric, Azure SQL Managed InstanceAUTD et SQL Server 2025 (17.x) Preview peut être ordonnée en incluant la
ORDER
clause. Pour plus d’informations, consultez Paramétrage des performances avec des index columnstore ordonnés. - Impossible d’inclure des colonnes métier de type nvarchar(max), varchar(max) et varbinary(max) dans les index columnstore non cluster. Seuls les index columnstore cluster prennent en charge les types métier, à compter de la version de SQL Server 2017 (14.x), d’Azure SQL Database (configuré au niveau Premium, au niveau Standard (S3 et versions ultérieures) et de tous les niveaux d’offre vCore. Les versions antérieures ne prennent pas en charge les types métier dans les index columnstore cluster et non cluster.
- À compter de SQL Server 2016 (13.x), vous pouvez créer un index columnstore non cluster sur une vue indexée.
Les index Columnstore ne peuvent pas être combinés avec les fonctionnalités suivantes :
- Colonnes calculées. À compter de SQL Server 2017 (14.x), un index columnstore cluster peut contenir une colonne calculée non persistante. Toutefois, dans SQL Server 2017 (14.x), les index columnstore cluster ne peuvent pas contenir de colonnes calculées persistantes et vous ne pouvez pas créer d’index non cluster sur des colonnes calculées.
- Compression de page et de ligne et format de stockage vardecimal . (Un index columnstore est déjà compressé dans un autre format.)
- Réplication avec des index columnstore cluster. Les index columnstore non cluster sont pris en charge. Pour plus d’informations, consultez sp_addarticle.
- Filestream.
Vous ne pouvez pas utiliser de curseurs ou de déclencheurs sur une table avec un index columnstore cluster. Cette restriction ne s’applique pas aux index columnstore non cluster. Vous pouvez utiliser des curseurs et des déclencheurs sur une table avec un index columnstore non cluster.
Limitations spécifiques de SQL Server 2014 (12.x) :
Les limitations suivantes s’appliquent uniquement à SQL Server 2014 (12.x). Dans cette version, vous pouvez utiliser des index columnstore en cluster pouvant être mis à jour. Les index columnstore non cluster sont toujours en lecture seule.
- Suivi des modifications. Vous ne pouvez pas utiliser le suivi des modifications avec les index columnstore.
- Capture de données modifiées. Cette fonctionnalité ne peut pas être activée sur les tables avec un index columnstore cluster. À compter de SQL Server 2016 (13.x), la capture de données modifiées peut être activée sur des tables avec un index columnstore non cluster.
- Secondaire lisible. Vous ne pouvez pas accéder à un index columnstore cluster (CCI) à partir d’un serveur secondaire lisible d’un groupe de disponibilité accessible en lecture Always On. Vous pouvez accéder à un index columnstore non cluster (NCCI) à partir d’un serveur secondaire lisible.
- Jeux de résultats actifs multiples (MARS). SQL Server 2014 (12.x) utilise cette fonctionnalité pour les connexions en lecture seule aux tables avec un index columnstore. Toutefois, SQL Server 2014 (12.x) ne prend pas en charge cette fonctionnalité pour les opérations de langage de manipulation de données (DML) simultanées sur une table avec un index columnstore. Si vous essayez d’utiliser la fonctionnalité à cet effet, SQL Server met fin aux connexions et annule les transactions.
- Les index columnstore non cluster ne peuvent pas être créés sur une vue ou une vue indexée.
Pour plus d’informations sur les avantages en matière de performances et les limitations des index columnstore, consultez les index Columnstore : Vue d’ensemble.
Métadonnées
Toutes les colonnes dans un index columnstore sont stockées dans les métadonnées en tant que colonnes incluses. L'index columnstore n'a pas de colonnes clés. Les vues système suivantes fournissent des informations sur les index columnstore :
- sys.indexes (Transact-SQL)
- sys.index_columns (Transact-SQL)
- sys.partitions (Transact-SQL)
- sys.column_store_segments (Transact-SQL)
- sys.column_store_dictionaries (Transact-SQL)
- sys.column_store_row_groups (Transact-SQL)
Exemples : convertir une table de rowstore en columnstore
Un. Convertir un tas en index columnstore cluster
Cet exemple crée une table en tant que tas, puis la convertit en index columnstore cluster nommé cci_Simple
. La création de l’index columnstore cluster modifie le stockage de la table entière de rowstore à columnstore.
CREATE TABLE dbo.SimpleTable(
ProductKey [INT] NOT NULL,
OrderDateKey [INT] NOT NULL,
DueDateKey [INT] NOT NULL,
ShipDateKey [INT] NOT NULL);
GO
CREATE CLUSTERED COLUMNSTORE INDEX cci_Simple ON dbo.SimpleTable;
GO
B. Convertir un index cluster en index columnstore cluster portant le même nom
Cet exemple crée une table avec un index cluster, puis illustre la syntaxe de conversion de l’index cluster en index columnstore cluster. La création de l’index columnstore cluster modifie le stockage de la table entière de rowstore à columnstore.
CREATE TABLE dbo.SimpleTable2 (
ProductKey [INT] NOT NULL,
OrderDateKey [INT] NOT NULL,
DueDateKey [INT] NOT NULL,
ShipDateKey [INT] NOT NULL);
GO
CREATE CLUSTERED INDEX cl_simple ON dbo.SimpleTable2 (ProductKey);
GO
CREATE CLUSTERED COLUMNSTORE INDEX cl_simple ON dbo.SimpleTable2
WITH (DROP_EXISTING = ON);
GO
Chapitre C. Gérer les index non cluster lors de la conversion d’une table rowstore en index columnstore
Cet exemple montre comment gérer les index non cluster lorsque vous convertissez une table rowstore en index columnstore. À compter de SQL Server 2016 (13.x), aucune action spéciale n’est requise. SQL Server définit et reconstruit automatiquement les index non cluster sur le nouvel index columnstore cluster.
Si vous souhaitez supprimer les index non cluster, utilisez l’instruction DROP INDEX avant de créer l’index columnstore. L’option DROP EXISTING supprime uniquement l’index cluster en cours de conversion. Elle ne supprime pas les index non cluster.
Dans SQL Server 2012 (11.x) et SQL Server 2014 (12.x), vous ne pouvez pas créer d’index non cluster sur un index columnstore.
--Create the table for use with this example.
CREATE TABLE dbo.SimpleTable (
ProductKey [INT] NOT NULL,
OrderDateKey [INT] NOT NULL,
DueDateKey [INT] NOT NULL,
ShipDateKey [INT] NOT NULL);
GO
--Create two nonclustered indexes for use with this example
CREATE INDEX nc1_simple ON dbo.SimpleTable (OrderDateKey);
CREATE INDEX nc2_simple ON dbo.SimpleTable (DueDateKey);
GO
Uniquement pour SQL Server 2012 (11.x) et SQL Server 2014 (12.x), vous devez supprimer les index non cluster pour créer l’index columnstore.
DROP INDEX dbo.SimpleTable.nc1_simple;
DROP INDEX dbo.SimpleTable.nc2_simple;
--Convert the rowstore table to a columnstore index.
CREATE CLUSTERED COLUMNSTORE INDEX cci_simple ON dbo.SimpleTable;
GO
D. Convertir une table de faits volumineuse de rowstore en columnstore
Cet exemple explique comment convertir une table de faits volumineuse d’une table rowstore en table columnstore.
Créez une petite table à utiliser dans cet exemple.
--Create a rowstore table with a clustered index and a nonclustered index. CREATE TABLE dbo.MyFactTable ( ProductKey [INT] NOT NULL, OrderDateKey [INT] NOT NULL, DueDateKey [INT] NOT NULL, ShipDateKey [INT] NOT NULL INDEX IDX_CL_MyFactTable CLUSTERED ( ProductKey ) ); --Add a nonclustered index. CREATE INDEX my_index ON dbo.MyFactTable ( ProductKey, OrderDateKey );
Supprimez tous les index non cluster de la table rowstore. Vous souhaiterez peut-être générer un script sur les index pour les recréer ultérieurement.
--Drop all nonclustered indexes DROP INDEX my_index ON dbo.MyFactTable;
Convertissez la table rowstore en table columnstore avec un index columnstore cluster.
Tout d’abord, recherchez le nom de l’index rowstore cluster existant. À l’étape 1, nous définissons le nom de l’index
IDX_CL_MyFactTable
sur . Si le nom de l’index n’a pas été spécifié, il a reçu un nom d’index unique généré automatiquement. Vous pouvez récupérer le nom généré automatiquement avec l’exemple de requête suivant :SELECT i.object_id, i.name, t.object_id, t.name FROM sys.indexes i INNER JOIN sys.tables t ON i.object_id = t.object_id WHERE i.type_desc = 'CLUSTERED' AND t.name = 'MyFactTable';
Option 1 : Supprimez l’index
IDX_CL_MyFactTable
cluster existant et convertissezMyFactTable
en columnstore. Modifiez le nom du nouvel index columnstore cluster.--Drop the clustered rowstore index. DROP INDEX [IDX_CL_MyFactTable] ON dbo.MyFactTable; GO --Create a new clustered columnstore index with the name MyCCI. CREATE CLUSTERED COLUMNSTORE INDEX IDX_CCL_MyFactTable ON dbo.MyFactTable; GO
Option 2 : Convertir en columnstore et réutiliser le nom d’index cluster rowstore existant.
--Create the clustered columnstore index, --replacing the existing rowstore clustered index of the same name CREATE CLUSTERED COLUMNSTORE INDEX [IDX_CL_MyFactTable] ON dbo.MyFactTable WITH (DROP_EXISTING = ON);
E. Convertir une table columnstore en table rowstore avec un index cluster
Pour convertir une table columnstore en table rowstore avec un index cluster, utilisez l’instruction CREATE INDEX avec l’option DROP_EXISTING.
CREATE CLUSTERED INDEX [IDX_CL_MyFactTable]
ON dbo.[MyFactTable] ( ProductKey )
WITH ( DROP_EXISTING = ON );
F. Convertir une table columnstore en segment de mémoire rowstore
Pour convertir une table columnstore en tas rowstore, supprimez l’index columnstore cluster. Cela n’est généralement pas recommandé, mais certains peuvent avoir des utilisations étroites. Pour plus d’informations sur les tas, consultez Segments de mémoire (tables sans index cluster).
DROP INDEX [IDX_CL_MyFactTable]
ON dbo.[MyFactTable];
G. Défragmentation en réorganisant l’index columnstore
Il existe deux façons de gérer l’index columnstore cluster. À compter de SQL Server 2016 (13.x), utilisez ALTER INDEX...REORGANIZE
plutôt que REBUILD. Pour plus d’informations, consultez le rowgroup d’index Columnstore. Dans les versions précédentes de SQL Server, vous pouvez utiliser CREATE CLUSTERED COLUMNSTORE INDEX avec DROP_EXISTING=ON, ou ALTER INDEX (Transact-SQL) et l’option REBUILD. Les deux méthodes ont obtenu les mêmes résultats.
Commencez par déterminer le nom de l’index columnstore cluster dans MyFactTable
.
SELECT i.object_id, i.name, t.object_id, t.name
FROM sys.indexes i
INNER JOIN sys.tables t on i.object_id = t.object_id
WHERE i.type_desc = 'CLUSTERED COLUMNSTORE'
AND t.name = 'MyFactTable';
Supprimez la fragmentation en effectuant un REORGANIZE sur l’index columnstore.
--Rebuild the entire index by using ALTER INDEX and the REBUILD option.
ALTER INDEX IDX_CL_MyFactTable
ON dbo.[MyFactTable]
REORGANIZE;
Exemples d’index columnstore non cluster
Un. Créer un index columnstore en tant qu’index secondaire sur une table rowstore
Cet exemple crée un index columnstore non cluster sur une table rowstore. Un seul index columnstore peut être créé dans cette situation. L’index columnstore nécessite un stockage supplémentaire, car il contient une copie des données dans la table rowstore. Cet exemple crée une table simple et un index cluster rowstore, puis illustre la syntaxe de création d’un index columnstore non cluster.
CREATE TABLE dbo.SimpleTable (
ProductKey [INT] NOT NULL,
OrderDateKey [INT] NOT NULL,
DueDateKey [INT] NOT NULL,
ShipDateKey [INT] NOT NULL);
GO
CREATE CLUSTERED INDEX cl_simple ON dbo.SimpleTable (ProductKey);
GO
CREATE NONCLUSTERED COLUMNSTORE INDEX csindx_simple
ON dbo.SimpleTable (OrderDateKey, DueDateKey, ShipDateKey);
GO
B. Créer un index columnstore non cluster de base à l’aide de toutes les options
L’exemple suivant illustre la syntaxe de création d’un index columnstore non cluster sur le groupe de fichiers DEFAULT, en spécifiant le degré maximal de parallélisme (MAXDOP) sur 2.
CREATE NONCLUSTERED COLUMNSTORE INDEX csindx_simple
ON SimpleTable (OrderDateKey, DueDateKey, ShipDateKey)
WITH (DROP_EXISTING = ON,
MAXDOP = 2)
ON "DEFAULT";
GO
Chapitre C. Créer un index columnstore non cluster avec un prédicat filtré
L’exemple suivant crée un index columnstore filtré et non cluster sur la Production.BillOfMaterials
table de l’exemple AdventureWorks2022
de base de données. Le prédicat de filtre peut inclure des colonnes qui ne sont pas des colonnes clés dans l’index filtré. Le prédicat de cet exemple sélectionne uniquement les lignes où EndDate
la valeur n’est pas NULL.
IF EXISTS (SELECT name FROM sys.indexes
WHERE name = N'FIBillOfMaterialsWithEndDate'
AND object_id = OBJECT_ID(N'Production.BillOfMaterials'))
DROP INDEX FIBillOfMaterialsWithEndDate
ON Production.BillOfMaterials;
GO
CREATE NONCLUSTERED COLUMNSTORE INDEX "FIBillOfMaterialsWithEndDate"
ON Production.BillOfMaterials (ComponentID, StartDate)
WHERE EndDate IS NOT NULL;
D. Modifier les données dans un index columnstore non cluster
S’applique à : SQL Server 2012 (11.x) via SQL Server 2014 (12.x).
Dans SQL Server 2014 (12.x) et les versions antérieures, après avoir créé un index columnstore non cluster sur une table, vous ne pouvez pas modifier directement les données de cette table. Une requête avec INSERT, UPDATE, DELETE ou MERGE échoue et retourne un message d’erreur. Voici les options que vous pouvez utiliser pour ajouter ou modifier les données dans la table :
Désactivez ou supprimez l’index columnstore. Vous pouvez ensuite mettre à jour les données dans la table. Si vous désactivez l’index columnstore, vous pouvez reconstruire l’index columnstore lorsque vous avez terminé la mise à jour des données. Par exemple:
ALTER INDEX mycolumnstoreindex ON dbo.mytable DISABLE; -- update the data in mytable as necessary ALTER INDEX mycolumnstoreindex on dbo.mytable REBUILD;
Chargez des données dans une table intermédiaire qui n’a pas d’index columnstore. Créez un index columnstore sur la table intermédiaire. Transférez la table de staging dans une partition vide de la table principale.
Basculez une partition de la table avec l’index columnstore dans une table intermédiaire vide. S’il existe un index columnstore sur la table intermédiaire, désactivez l’index columnstore. Effectuez les mises à jour. Générez (ou régénérez) l’index columnstore. Remettez la table intermédiaire dans la partition (maintenant vide) de la table principale.
Exemples : Azure Synapse Analytics, Analytics Platform System (PDW)
Un. Modifier un index cluster en index columnstore cluster
À l’aide de l’instruction CREATE CLUSTERED COLUMNSTORE INDEX avec DROP_EXISTING = ON, vous pouvez :
Modifiez un index cluster en index columnstore cluster.
Régénérez un index columnstore cluster.
Cet exemple crée la xDimProduct
table en tant que table rowstore avec un index cluster. Ensuite, l’exemple utilise CREATE CLUSTERED COLUMNSTORE INDEX pour remplacer la table d’une table rowstore par une table columnstore.
-- Uses AdventureWorks
IF EXISTS (SELECT name FROM sys.tables
WHERE name = N'xDimProduct'
AND object_id = OBJECT_ID (N'xDimProduct'))
DROP TABLE xDimProduct;
--Create a distributed table with a clustered index.
CREATE TABLE xDimProduct (ProductKey, ProductAlternateKey, ProductSubcategoryKey)
WITH ( DISTRIBUTION = HASH(ProductKey),
CLUSTERED INDEX (ProductKey) )
AS SELECT ProductKey, ProductAlternateKey, ProductSubcategoryKey FROM DimProduct;
Recherchez le nom de l’index cluster créé automatiquement pour la nouvelle table dans les métadonnées système, à l’aide sys.indexes
de . Par exemple:
SELECT i.object_id, i.name, t.object_id, t.name, i.type_desc
FROM sys.indexes i
INNER JOIN sys.tables t ON i.object_id = t.object_id
WHERE i.type_desc = 'CLUSTERED'
AND t.name = 'xdimProduct';
À présent, vous pouvez choisir :
- Supprimez l’index columnstore cluster existant avec un nom créé automatiquement, puis créez un index columnstore cluster avec un nom défini par l’utilisateur.
- Supprimez et remplacez l’index existant par un index columnstore cluster, en conservant le même nom généré par le système, tel que
ClusteredIndex_1bd8af8797f7453182903cc68df48541
.
Par exemple:
--1. DROP the existing clustered columnstore index with an automatically-created name, for example:
DROP INDEX ClusteredIndex_1bd8af8797f7453182903cc68df48541 on xdimProduct;
GO
CREATE CLUSTERED COLUMNSTORE INDEX [<new_index_name>]
ON xdimProduct;
GO
--Or,
--2. Change the existing clustered index to a clustered columnstore index with the same name.
CREATE CLUSTERED COLUMNSTORE INDEX [ClusteredIndex_1bd8af8797f7453182903cc68df48541]
ON xdimProduct
WITH ( DROP_EXISTING = ON );
GO
B. Reconstruire un index columnstore cluster
À l’aide de l’exemple précédent, cet exemple utilise CREATE CLUSTERED COLUMNSTORE INDEX pour reconstruire l’index columnstore cluster existant, appelé cci_xDimProduct
.
--Rebuild the existing clustered columnstore index.
CREATE CLUSTERED COLUMNSTORE INDEX cci_xDimProduct
ON xdimProduct
WITH ( DROP_EXISTING = ON );
Chapitre C. Modifier le nom d’un index columnstore cluster
Pour modifier le nom d’un index columnstore cluster, supprimez l’index columnstore cluster existant, puis recréez l’index avec un nouveau nom.
Nous vous recommandons de limiter cette opération à une petite table ou vide. Il faut beaucoup de temps pour supprimer un index columnstore volumineux en cluster et reconstruire avec un autre nom.
Cet exemple fait référence à l’index cci_xDimProduct
columnstore cluster de l’exemple précédent. Cet exemple supprime l’index cci_xDimProduct
columnstore cluster, puis recrée l’index columnstore cluster avec le nom mycci_xDimProduct
.
--For illustration purposes, drop the clustered columnstore index.
--The table continues to be distributed, but changes to a heap.
DROP INDEX cci_xdimProduct ON xDimProduct;
--Create a clustered index with a new name, mycci_xDimProduct.
CREATE CLUSTERED COLUMNSTORE INDEX mycci_xDimProduct
ON xdimProduct
WITH ( DROP_EXISTING = OFF );
D. Convertir une table columnstore en table rowstore avec un index cluster
Il peut y avoir une situation pour laquelle vous souhaitez supprimer un index columnstore cluster et créer un index cluster. Lorsque vous supprimez un index columnstore cluster, la table est remplacée par le format rowstore. Cet exemple convertit une table columnstore en table rowstore avec un index cluster portant le même nom. Aucune des données n’est perdue. Toutes les données sont envoyées à la table rowstore, et les colonnes répertoriées deviennent les colonnes clés de l’index cluster.
--Drop the clustered columnstore index and create a clustered rowstore index.
--All of the columns are stored in the rowstore clustered index.
--The columns listed are the included columns in the index.
CREATE CLUSTERED INDEX cci_xDimProduct
ON xdimProduct (ProductKey, ProductAlternateKey, ProductSubcategoryKey, WeightUnitMeasureCode)
WITH ( DROP_EXISTING = ON);
E. Convertir une table columnstore en tas rowstore
Utilisez DROP INDEX pour supprimer l’index columnstore cluster et convertir la table en segment de mémoire rowstore. Cet exemple convertit la cci_xDimProduct
table en segment de mémoire rowstore. La table continue d’être distribuée, mais elle est stockée en tant que tas.
--Drop the clustered columnstore index. The table continues to be distributed, but changes to a heap.
DROP INDEX cci_xdimProduct ON xdimProduct;
F. Créer un index columnstore cluster ordonné sur une table sans index
Un index columnstore non ordonné couvre toutes les colonnes par défaut, sans avoir à spécifier une liste de colonnes. Un index columnstore ordonné vous permet de spécifier l’ordre des colonnes. La liste n’a pas besoin d’inclure toutes les colonnes.
Pour plus d’informations, consultez Paramétrage des performances avec des index columnstore ordonnés.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
ORDER (SHIPDATE);
G. Convertir un index columnstore cluster en index columnstore cluster ordonné
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
ORDER (SHIPDATE)
WITH (DROP_EXISTING = ON);
H. Ajouter une colonne à l’ordre d’un index columnstore cluster ordonné
Vous pouvez spécifier un ordre pour les colonnes d’un index columnstore. L’index columnstore en cluster d’origine a été classé uniquement sur la SHIPDATE
colonne. L’exemple suivant ajoute la PRODUCTKEY
colonne à l’ordre. Pour connaître la disponibilité des index columnstore ordonnés, consultez index Columnstore : Vue d’ensemble.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
ORDER (SHIPDATE, PRODUCTKEY)
WITH (DROP_EXISTING = ON);
Je. Modifier l’ordinal des colonnes ordonnées
L’index columnstore en cluster ordonné d’origine a été ordonné sur SHIPDATE
, PRODUCTKEY
. L’exemple suivant modifie l’ordre sur PRODUCTKEY
, SHIPDATE
. Pour connaître la disponibilité des index columnstore ordonnés, consultez index Columnstore : Vue d’ensemble.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
ORDER (PRODUCTKEY,SHIPDATE)
WITH (DROP_EXISTING = ON);
J. Créer un index columnstore cluster ordonné
Vous pouvez créer un index columnstore cluster avec des clés de classement. Lors de la création d’un index columnstore cluster ordonné, vous devez appliquer l’indicateur MAXDOP = 1
de requête pour une qualité maximale de tri et une durée la plus courte. Pour connaître la disponibilité des index columnstore ordonnés, consultez index Columnstore : Vue d’ensemble.
CREATE CLUSTERED COLUMNSTORE INDEX [OrderedCCI] ON dbo.FactResellerSalesPartCategoryFull
ORDER (EnglishProductSubcategoryName, EnglishProductName)
WITH (MAXDOP = 1, DROP_EXISTING = ON);