Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Sistema de Plataforma de Análise (PDW)
Base de dados SQL no Microsoft Fabric
Converter uma tabela rowstore em um índice columnstore clusterizado ou criar um índice columnstore não clusterizado. Use um índice columnstore para executar com eficiência análises operacionais em tempo real em uma carga de trabalho OLTP ou para melhorar a compactação de dados e o desempenho de consultas para cargas de trabalho de data warehouse.
Siga o que há de novo nos índices columnstore para obter as melhorias mais recentes para esse recurso.
Índices columnstore clusterizados ordenados foram introduzidos no SQL Server 2022 (16.x). Para obter mais informações, consulte CREATE COLUMNSTORE INDEX. Para obter informações sobre a disponibilidade de índices columnstore ordenados, consulte Columnstore indexes: Overview.
A partir do SQL Server 2016 (13.x), você pode criar a tabela como um índice columnstore clusterizado. Não é mais necessário primeiro criar uma tabela rowstore e, em seguida, convertê-la em um índice columnstore clusterizado.
Para obter informações sobre diretrizes de design de índice columnstore, consulte Columnstore indexes - design guidance.
Transact-SQL convenções de sintaxe
Syntax
Sintaxe do Banco de Dados SQL do Azure e da Instância Gerenciada SQL do AzureAUTD:
-- 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 )
Sintaxe do 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 )
Sintaxe do 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
[;]
Disponibilidade da versão
Algumas das opções não estão disponíveis em todas as versões do mecanismo de banco de dados. A tabela a seguir mostra as versões quando as opções são introduzidas em índices columnstore clusterizados e columnstore não clusterizados:
| Option | CLUSTERED | NONCLUSTERED |
|---|---|---|
| COMPRESSION_DELAY | SQL Server 2016 (13.x) | SQL Server 2016 (13.x) |
| DATA_COMPRESSION | SQL Server 2016 (13.x) | SQL Server 2016 (13.x) |
| ONLINE | SQL Server 2019 (15.x) | SQL Server 2017 (14.x) |
| Cláusula WHERE | N/A | SQL Server 2016 (13.x) |
| Cláusula ORDER | SQL Server 2016 (13.x) | SQL Server 2025 (17.x) |
Todas as opções estão disponíveis no Banco de Dados SQL do Azure e noAUTD da Instância Gerenciada SQL do Azure.
Para obter mais detalhes sobre a disponibilidade de recursos, consulte Novidades nos índices columnstore.
Arguments
CRIAR ÍNDICE COLUMNSTORE CLUSTERIZADO
Crie um índice columnstore clusterizado no qual todos os dados são compactados e armazenados por coluna. O índice inclui todas as colunas da tabela e armazena a tabela inteira. Se a tabela existente for um heap ou um índice clusterizado, ela será convertida em um índice columnstore clusterizado. Se a tabela já estiver armazenada como um índice columnstore clusterizado, o índice existente será descartado e reconstruído.
Important
No banco de dados SQL na malha, um índice columnstore clusterizado deve ser criado dentro do mesmo lote ou transação que a tabela à qual pertence. Adicionar um índice columnstore clusterizado a uma tabela depois que ele já tiver sido criado pode resultar no seguinte erro:
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
Especifica o nome do novo índice.
Se a tabela já tiver um índice columnstore clusterizado, você poderá especificar o mesmo nome que o índice existente ou poderá usar a opção DROP EXISTING para especificar um novo nome.
EM [ database_name. [ schema_name ] . | schema_name . ] table_name
Especifica o nome de uma, duas ou três partes da tabela a ser armazenada como um índice columnstore clusterizado. Se a tabela for um heap ou tiver um índice clusterizado, a tabela será convertida de um rowstore para um columnstore. Se a tabela já for um columnstore, essa instrução recriará o índice columnstore clusterizado.
ORDER para columnstore agrupado
Use a column_store_order_ordinal coluna no sys.index_columns para determinar a ordem das colunas para um índice columnstore clusterizado. A ordenação Columnstore ajuda na eliminação de segmentos, especialmente com dados de cadeia de caracteres. Para obter mais informações, consulte Ajuste de desempenho com índices columnstore ordenados e Columnstore indexes - diretrizes de design.
Para converter em um índice columnstore clusterizado ordenado, o índice existente deve ser um índice columnstore clusterizado. Utilize a opção DROP_EXISTING.
Os tipos de dados LOB (os tipos de dados de comprimento (máximo) não podem ser a chave de um índice columnstore clusterizado ordenado.
Ao criar um índice columnstore agrupado ordenado, use a MAXDOP = 1 opção para a classificação da mais alta qualidade, em troca de uma duração significativamente maior da CREATE INDEX instrução. Para criar o índice o mais rápido possível, não limite o MAXDOP. A mais alta qualidade de compactação e classificação pode ajudar as consultas no índice columnstore.
Para obter informações sobre a disponibilidade de índices columnstore ordenados, consulte Columnstore indexes: Overview.
COM opções
DROP_EXISTING = [DESLIGADO] | EM
DROP_EXISTING = ON Especifica para descartar o índice existente e criar um novo índice ColumnStore.
CREATE CLUSTERED COLUMNSTORE INDEX cci
ON Sales.OrderLines WITH (DROP_EXISTING = ON);
O padrão, DROP_EXISTING = OFF, espera que o nome do índice seja o mesmo que o nome existente. Ocorrerá um erro se o nome de índice especificado já existir.
MAXDOP = max_degree_of_parallelism
Esta opção pode substituir o grau máximo existente de configuração do servidor de paralelismo durante a operação de índice. Use MAXDOP para limitar o número de processadores usados em uma execução de plano paralelo. O máximo é de 64 processadores.
max_degree_of_parallelism valores podem ser:
- 1, o que significa suprimir a geração de planos paralelos.
- >1, o que significa restringir o número máximo de processadores usados em uma operação de índice paralelo ao número especificado, ou menos, com base na carga de trabalho atual do sistema. Por exemplo, quando MAXDOP = 4, o número de processadores usados é 4 ou menos.
- 0 (padrão), o que significa usar o número real de processadores, ou menos, com base na carga de trabalho atual do sistema.
CREATE CLUSTERED COLUMNSTORE INDEX cci
ON Sales.OrderLines WITH (MAXDOP = 2);
Para obter mais informações, consulte Configuração do servidor: grau máximo de paralelismo e Configurar operações de índice paralelo.
COMPRESSION_DELAY = 0 | atraso [ MINUTOS ]
Para uma tabela baseada em disco, delay especifica o número mínimo de minutos que um grupo de linhas delta no estado fechado deve permanecer no grupo de linhas delta. O SQL Server pode compactá-lo no grupo de linhas compactado. Como as tabelas baseadas em disco não controlam os tempos de inserção e atualização em linhas individuais, o SQL Server aplica o atraso a grupos de linhas delta no estado fechado.
O padrão é 0 minutos.
CREATE CLUSTERED COLUMNSTORE INDEX cci
ON Sales.OrderLines WITH (COMPRESSION_DELAY = 10 MINUTES);
Para obter recomendações sobre quando usar COMPRESSION_DELAY, consulte Introdução aos índices columnstore para análise operacional em tempo real.
DATA_COMPRESSION = COLUMNSTORE | COLUMNSTORE_ARCHIVE
Especifica a opção de compactação de dados para a tabela especificada, o número da partição ou o intervalo de partições. As opções são as seguintes:
-
COLUMNSTOREé o padrão e especifica para compactar com a compactação columnstore de maior desempenho. Esta opção é a escolha típica. -
COLUMNSTORE_ARCHIVEcomprime ainda mais a tabela ou partição para um tamanho menor. Use esta opção para situações como arquivamento, que requer um tamanho de armazenamento menor e pode dar mais tempo para armazenamento e recuperação.
CREATE CLUSTERED COLUMNSTORE INDEX cci
ON Sales.OrderLines WITH (DATA_COMPRESSION = COLUMNSTORE_ARCHIVE);
Para obter mais informações sobre compactação, consulte Compactação de dados.
ONLINE = [ATIVADO | DESLIGADO]
-
ONEspecifica que o índice columnstore permanece online e disponível, enquanto a nova cópia do índice está sendo criada. -
OFFEspecifica que o índice não está disponível para uso enquanto a nova cópia está sendo criada.
CREATE CLUSTERED COLUMNSTORE INDEX cci
ON Sales.OrderLines WITH (ONLINE = ON);
Opções ON
Com essas opções, você pode especificar opções para armazenamento de dados, como um esquema de partição, um grupo de arquivos específico ou o grupo de arquivos padrão. Se a opção ON não for especificada, o índice usará a partição de configurações ou as configurações de grupo de arquivos da tabela existente.
partition_scheme_name ( column_name ) especifica o esquema de partição para a tabela. O esquema de partição já deve existir no banco de dados. Para criar o esquema de partição, consulte CREATE PARTITION SCHEME.
column_name especifica a coluna em relação à qual um índice particionado é particionado. Esta coluna deve corresponder ao tipo de dados, comprimento e precisão do argumento da função de partição que partition_scheme_name está usando.
filegroup_name especifica o grupo de arquivos para armazenar o índice columnstore clusterizado. Se nenhum local for especificado e a tabela não estiver particionada, o índice usará o mesmo grupo de arquivos que a tabela ou exibição subjacente. O grupo de arquivos já deve existir.
Para criar o índice no grupo de arquivos padrão, use "default" ou [default]. Se você especificar "default", a QUOTED_IDENTIFIER opção deve ser ON para a sessão atual.
QUOTED_IDENTIFIER é ON por padrão. Para obter mais informações, consulte SET QUOTED_IDENTIFIER.
CRIAR ÍNDICE COLUMNSTORE [NÃO CLUSTERIZADO]
Crie um índice columnstore não clusterizado em uma tabela rowstore armazenada como um heap ou índice clusterizado. O índice pode ter uma condição filtrada e não precisa incluir todas as colunas da tabela subjacente. O índice columnstore requer espaço suficiente para armazenar uma cópia dos dados. Você pode atualizar o índice e ele é atualizado à medida que a tabela subjacente é alterada. O índice columnstore não clusterizado em um índice clusterizado permite análises em tempo real.
index_name
Especifica o nome do índice. index_name deve ser exclusivo dentro da tabela, mas não precisa ser exclusivo dentro do banco de dados. Os nomes de índice devem seguir as regras de identificadores.
( coluna [ ,... n ] )
Especifica as colunas a serem armazenadas. Um índice columnstore não clusterizado é limitado a 1.024 colunas.
Cada coluna deve ser de um tipo de dados suportado para índices columnstore. Consulte Limitações e restrições para obter uma lista dos tipos de dados suportados.
EM [ database_name. [ schema_name ] . | schema_name . ] table_name
Especifica o nome de uma, duas ou três partes da tabela que contém o índice.
ORDER para columnstore não clusterizado
As colunas especificadas na ORDER cláusula para um índice columnstore não clusterizado devem ser um subconjunto das colunas de chave para o índice.
Use a column_store_order_ordinal coluna no sys.index_columns para determinar a ordem das colunas para um índice columnstore não clusterizado. A ordenação Columnstore ajuda na eliminação de segmentos, especialmente com dados de cadeia de caracteres. Para obter mais informações, consulte Ajuste de desempenho com índices columnstore ordenados e Columnstore indexes - diretrizes de design. As considerações de design e desempenho nesses artigos geralmente se aplicam a índices columnstore clusterizados e não clusterizados.
Os tipos de dados LOB (os tipos de dados de comprimento (máximo)) não podem ser a chave de um índice columnstore não clusterizado ordenado.
Ao criar um índice columnstore ordenado não clusterizado, use as MAXDOP = 1 opções para a classificação da mais alta qualidade, em troca de uma duração significativamente maior da CREATE INDEX instrução. Para criar o índice o mais rápido possível, não limite MAXDOP. A mais alta qualidade de compactação e classificação pode ajudar as consultas no índice columnstore.
Para ver a disponibilidade do índice columnstore ordenado, consulte Disponibilidade do índice columnstore ordenado.
COM opções
DROP_EXISTING = { DESLIGADO | EM }
DROP_EXISTING = ATIVADO
O índice existente é descartado e reconstruído. O nome do índice especificado deve ser o mesmo que um índice existente no momento; no entanto, a definição do índice pode ser modificada. Por exemplo, você pode especificar colunas diferentes ou opções de índice.
DROP_EXISTING = DESLIGADO
Um erro será mostrado se o nome do índice especificado já existir. O tipo de índice não pode ser alterado usando DROP_EXISTING. Em sintaxe compatível com versões anteriores, WITH DROP_EXISTING é equivalente a WITH DROP_EXISTING = ON.
MAXDOP = max_degree_of_parallelism
Substitui a configuração do servidor: opção de configuração de grau máximo de paralelismo durante a operação de índice. Use MAXDOP para limitar o número de processadores usados em uma execução de plano paralelo. O máximo é de 64 processadores.
max_degree_of_parallelism valores podem ser:
- 1, o que significa suprimir a geração de planos paralelos.
- >1, o que significa restringir o número máximo de processadores usados em uma operação de índice paralelo ao número especificado, ou menos, com base na carga de trabalho atual do sistema. Por exemplo, quando MAXDOP = 4, o número de processadores usados é 4 ou menos.
- 0 (padrão), o que significa usar o número real de processadores ou menos com base na carga de trabalho atual do sistema.
Para obter mais informações, consulte Configurar operações de índice paralelo.
Note
As operações de índice paralelo não estão disponíveis em todas as edições do Microsoft SQL Server. Para obter uma lista de funcionalidades suportadas pelas edições do SQL Server, consulte Edições e funcionalidades suportadas do SQL Server 2022.
ONLINE = [ATIVADO | DESLIGADO]
-
ONEspecifica que o índice columnstore permanece online e disponível, enquanto a nova cópia do índice está sendo criada. -
OFFEspecifica que o índice não está disponível para uso enquanto a nova cópia está sendo criada. Em um índice não clusterizado, a tabela base permanece disponível. Somente o índice columnstore não clusterizado não é usado para satisfazer consultas até que o novo índice seja concluído.
CREATE COLUMNSTORE INDEX ncci
ON Sales.OrderLines(StockItemID, Quantity, UnitPrice, TaxRate) WITH (ONLINE = ON);
COMPRESSION_DELAY = 0 | atraso [ MINUTOS ]
Especifica um limite inferior sobre quanto tempo uma linha deve permanecer em um grupo de linhas delta, antes de ser qualificada para migração para um grupo de linhas compactado. Por exemplo, você pode dizer que, se uma linha permanecer inalterada por 120 minutos, essa linha será qualificada para compactação no formato de armazenamento colunar.
Para um índice columnstore em tabelas baseadas em disco, a hora em que uma linha foi inserida ou atualizada não é controlada. Em vez disso, o tempo de fechamento do grupo de linhas delta é usado como um proxy para a linha. A duração padrão é 0 minutos. Uma linha é migrada para o armazenamento colunar depois que 1 milhão de linhas se acumulam no grupo de linhas delta e é marcada como fechada.
DATA_COMPRESSION
Especifica a opção de compactação de dados para a tabela especificada, o número da partição ou o intervalo de partições. Aplica-se somente a índices columnstore, incluindo não clusterizados e clusterizados. As opções são as seguintes:
-
COLUMNSTOREé o padrão e especifica para compactar com a compactação columnstore de maior desempenho. Esta opção é a escolha típica. -
COLUMNSTORE_ARCHIVEcomprime ainda mais a tabela ou partição para um tamanho menor. Você pode usar essa opção para arquivamento ou para outras situações que exigem um tamanho de armazenamento menor e podem dar mais tempo para armazenamento e recuperação.
Para obter mais informações sobre compactação, consulte Compactação de dados.
ONDE filter_expression <> [ E <filter_expression> ]
Chamada de predicado de filtro, essa opção especifica quais linhas devem ser incluídas no índice. O SQL Server cria estatísticas filtradas nas linhas de dados no índice filtrado.
O predicado do filtro usa uma lógica de comparação simples. Comparações que usam NULL literais não são permitidas com os operadores de comparação. Em vez disso, use o e IS NULL operadoresIS NOT NULL.
Aqui estão alguns exemplos de predicados de filtro para a Production.BillOfMaterials tabela:
WHERE StartDate > '20000101' AND EndDate <= '20000630'WHERE ComponentID IN (533, 324, 753)WHERE StartDate IN ('20000404', '20000905') AND EndDate IS NOT NULL
Para obter orientação sobre índices filtrados, consulte Criar índices filtrados.
Opções ON
As opções a seguir especificam os grupos de arquivos nos quais o índice é criado.
partition_scheme_name ( column_name )
Especifica o esquema de partição que define os grupos de arquivos nos quais as partições de um índice particionado são mapeadas. O esquema de partição deve existir dentro do banco de dados executando CREATE PARTITION SCHEME.
column_name especifica a coluna em relação à qual um índice particionado é particionado. Esta coluna deve corresponder ao tipo de dados, comprimento e precisão do argumento da função de partição que partition_scheme_name está usando. column_name não se restringe às colunas na definição de índice. Ao particionar um índice columnstore, o Mecanismo de Banco de Dados adiciona a coluna de particionamento como uma coluna do índice, se ainda não estiver especificado.
Se a tabela estiver particionada e partition_scheme_name ou grupo de arquivos não forem especificados, o índice será colocado no mesmo esquema de partição e usará a mesma coluna de particionamento que a tabela subjacente.
Um índice columnstore em uma tabela particionada deve estar alinhado à partição. Para obter mais informações sobre particionamento de índices, consulte Tabelas e índices particionados.
filegroup_name
Especifica um nome de grupo de arquivos no qual criar o índice. Se filegroup_name não for especificado e a tabela não estiver particionada, o índice usará o mesmo grupo de arquivos que a tabela subjacente. O grupo de arquivos já deve existir.
"default"
Cria o índice especificado no grupo de arquivos padrão.
O termo padrão, neste contexto, não é uma palavra-chave. É um identificador para o grupo de arquivos padrão e deve ser delimitado, como em ON "default" ou ON [default]. Se "default" for especificado, a opção QUOTED_IDENTIFIER deve estar ATIVADA para a sessão atual, que é a configuração padrão. Para obter mais informações, consulte SET QUOTED_IDENTIFIER.
Permissions
Requer permissão de alteração na tabela.
Remarks
Você pode criar um índice columnstore em uma tabela temporária. Quando a tabela é descartada ou a sessão termina, o índice também é descartado.
No banco de dados SQL de malha, as tabelas com índices columnstore clusterizados não são espelhadas para o Fabric OneLake.
Índices filtrados
Um índice filtrado é um índice otimizado e não clusterizado, adequado para consultas que selecionam uma pequena porcentagem de linhas de uma tabela. Ele usa um predicado de filtro para indexar uma parte dos dados na tabela. Um índice filtrado bem projetado pode melhorar o desempenho da consulta, reduzir os custos de armazenamento e os custos de manutenção.
Opções SET necessárias para índices filtrados
As opções SET na coluna de valores necessários são necessárias sempre que ocorrer qualquer uma das seguintes condições:
- Criar um índice filtrado.
- Uma operação INSERT, UPDATE, DELETE ou MERGE modifica os dados em um índice filtrado.
- O otimizador de consulta usa o índice filtrado para produzir o plano de consulta.
| Opções SET | Valor obrigatório | Valor padrão do servidor | Valor OLE DB e ODBC padrão | Valor de DB-Library padrão |
|---|---|---|---|---|
ANSI_NULLS |
ON | ON | ON | OFF |
ANSI_PADDING |
ON | ON | ON | OFF |
ANSI_WARNINGS
1 |
ON | ON | ON | OFF |
ARITHABORT |
ON | ON | OFF | OFF |
CONCAT_NULL_YIELDS_NULL |
ON | ON | ON | OFF |
NUMERIC_ROUNDABORT |
OFF | OFF | OFF | OFF |
QUOTED_IDENTIFIER |
ON | ON | ON | OFF |
1 Definir ANSI_WARNINGS como ON define implicitamente ARITHABORT como ON quando o nível de compatibilidade do banco de dados é definido como 90 ou posterior. Se o nível de compatibilidade do banco de dados estiver definido como 80 ou anterior, você deverá definir explicitamente a opção ARITHABORT como ON.
Se as opções SET estiverem incorretas, as seguintes condições podem ocorrer:
O índice filtrado não é criado.
O Mecanismo de Banco de Dados gera um erro e reverte instruções INSERT, UPDATE, DELETE ou MERGE que alteram dados no índice.
O otimizador de consulta não considera o índice no plano de execução para nenhuma instrução Transact-SQL.
Para obter mais informações sobre índices filtrados, consulte Criar índices filtrados.
Limitações
Cada coluna em um índice columnstore deve ser de um dos seguintes tipos de dados corporativos comuns:
- datatempodeslocado [ ( n ) ]
- datetime2 [ ( n ) ]
- datetime
- smalldatetime
- date
- tempo [ ( n ) ]
- flutuador [ ( n ) ]
- real [ ( n ) ]
- decimal [ ( precisão [ , escala ] ) ]
- numérico [ ( precisão [ , escala ] ) ]
- money
- smallmoney
- bigint
- int
- smallint
- tinyint
- bit
- Nvarchar [ ( n ) ]
- nvarchar(max)1
- nchar [ ( n ) ]
- Varchar [ ( n ) ]
- varchar(max)1
- char [ ( n ) ]
- Varbinary [ ( n ) ]
- varbinary(max)1
- binário [ ( n ) ]
- uniqueidentifier2
1 Aplica-se ao SQL Server 2017 (14.x) e ao Banco de Dados SQL do Azure na camada Premium, na camada Standard (S3 e superior) e em todas as camadas de ofertas vCore, somente em índices columnstore clusterizados.
2 Aplica-se ao SQL Server 2014 (12.x) e versões posteriores.
Se a tabela subjacente tiver uma coluna de um tipo de dados que não é suportado para índices columnstore, você deve omitir essa coluna do índice columnstore não clusterizado.
Dados de objeto grande (LOB) maiores que 8 kilobytes são armazenados em armazenamento LOB fora de linha, com apenas um ponteiro para o local físico armazenado no segmento de coluna. O tamanho dos dados armazenados não é relatado em sys.column_store_segments, sys.column_store_dictionaries ou sys.dm_db_column_store_row_group_physical_stats.
As colunas que usam qualquer um dos seguintes tipos de dados não podem ser incluídas em um índice columnstore:
- ntext, texto e imagem
- nvarchar(max), varchar(max), e varbinary(max)1
- rowversion (e carimbo de data/hora)
- sql_variant
- Tipos CLR (hierarchyid e tipos espaciais)
- xml
- uniqueidentifier2
1 Aplica-se ao SQL Server 2016 (13.x) e versões anteriores e a índices columnstore não clusterizados.
2 Aplica-se ao SQL Server 2012 (11.x).
Índices columnstore não clusterizados:
- Não pode ter mais de 1.024 colunas.
- Não pode ser criado como um índice baseado em restrições. É possível ter restrições exclusivas, restrições de chave primária e restrições de chave estrangeira em uma tabela com um índice columnstore. As restrições são sempre impostas com um índice de armazenamento de linhas. As restrições não podem ser impostas com um índice columnstore (clusterizado ou não clusterizado).
- Não é possível incluir uma coluna esparsa.
- Não é possível alterar usando a instrução ALTER INDEX. Para alterar o índice não clusterizado, você deve descartar e recriar o índice columnstore. Você pode usar ALTER INDEX para desabilitar e reconstruir um índice columnstore.
- Não é possível criar usando a palavra-chave INCLUDE.
- Não é possível especificar as
ASCpalavras-chave ouDESCna lista de colunas de índice. Os índices Columnstore são ordenados de acordo com os algoritmos de compressão. - No Azure SQL Database, a base de dados SQL no Microsoft Fabric, Azure SQL Managed InstanceAUTD e SQL Server 2025 (17.x) podem ser ordenadas incluindo a
ORDERcláusula. Para obter mais informações, consulte Otimização de desempenho com índices columnstore ordenados. - Não é possível incluir colunas LOB do tipo nvarchar(max), varchar(max) e varbinary(max) em índices columnstore não clusterizados. Apenas os índices columnstore clusterizados dão suporte a tipos de LOB, começando na versão SQL Server 2017 (14.x), Banco de Dados SQL do Azure (configurado na camada Premium, camada Standard (S3 e superior) e todas as camadas de ofertas vCore). As versões anteriores não oferecem suporte a tipos de LOB em índices columnstore clusterizados e não clusterizados.
- A partir do SQL Server 2016 (13.x), você pode criar um índice columnstore não clusterizado em um modo de exibição indexado.
Os índices Columnstore não podem ser combinados com os seguintes recursos:
- Colunas computadas. A partir do SQL Server 2017 (14.x), um índice columnstore clusterizado pode conter uma coluna computada não persistente. No entanto, no SQL Server 2017 (14.x), os índices columnstore clusterizados não podem conter colunas computadas persistentes e você não pode criar índices não clusterizados em colunas computadas.
- Compressão de página e linha e o formato de armazenamento vardecimal . (Um índice columnstore já está compactado em um formato diferente.)
- Replicação com índices columnstore clusterizados. Há suporte para índices columnstore não clusterizados. Para obter mais informações, consulte sp_addarticle.
- Filestream.
Não é possível usar cursores ou gatilhos em uma tabela com um índice columnstore clusterizado. Essa restrição não se aplica a índices columnstore não clusterizados. Você pode usar cursores e gatilhos em uma tabela com um índice columnstore não clusterizado.
Limitações específicas do SQL Server 2014 (12.x):
As limitações a seguir se aplicam somente ao SQL Server 2014 (12.x). Nesta versão, você pode usar índices columnstore clusterizados atualizáveis. Os índices columnstore não clusterizados ainda são somente leitura.
- Controlo de alterações. Não é possível usar o controle de alterações com índices columnstore.
- Alterar a captura de dados. Esse recurso não pode ser habilitado em tabelas com um índice columnstore clusterizado. A partir do SQL Server 2016 (13.x), a captura de dados de alteração pode ser habilitada em tabelas com um índice columnstore não clusterizado.
- Secundário legível. Não é possível acessar um índice columnstore (CCI) clusterizado a partir de um secundário legível de um grupo de disponibilidade legível Always On. Você pode acessar um índice columnstore não clusterizado (NCCI) a partir de um secundário legível.
- Vários conjuntos de resultados ativos (MARS). O SQL Server 2014 (12.x) usa esse recurso para conexões somente leitura com tabelas com um índice columnstore. No entanto, o SQL Server 2014 (12.x) não oferece suporte a esse recurso para operações DML (linguagem de manipulação de dados simultâneas) em uma tabela com um índice columnstore. Se você tentar usar o recurso para essa finalidade, o SQL Server encerrará as conexões e cancelará as transações.
- Os índices columnstore não clusterizados não podem ser criados em um modo de exibição ou modo de exibição indexado.
Para obter informações sobre os benefícios e limitações de desempenho dos índices columnstore, consulte Columnstore indexes: visão geral.
Metadata
Todas as colunas em um índice columnstore são armazenadas nos metadados como colunas incluídas. O índice columnstore não tem colunas-chave. As seguintes exibições do sistema fornecem informações sobre índices 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)
Exemplos: converter tabela de rowstore em columnstore
A. Converter uma pilha em um índice columnstore clusterizado
Este exemplo cria uma tabela como um heap e, em seguida, converte-a em um índice columnstore clusterizado chamado cci_Simple. A criação do índice columnstore clusterizado altera o armazenamento de toda a tabela de rowstore para 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. Converter um índice clusterizado em um índice columnstore clusterizado com o mesmo nome
Este exemplo cria uma tabela com índice clusterizado e, em seguida, demonstra a sintaxe da conversão do índice clusterizado em um índice columnstore clusterizado. A criação do índice columnstore clusterizado altera o armazenamento de toda a tabela de rowstore para 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
C. Manipular índices não clusterizados ao converter uma tabela rowstore em um índice columnstore
Este exemplo mostra como lidar com índices não clusterizados quando você converte uma tabela rowstore em um índice columnstore. A partir do SQL Server 2016 (13.x), nenhuma ação especial é necessária. O SQL Server define e recria automaticamente os índices não clusterizados no novo índice columnstore clusterizado.
Se você quiser descartar os índices não clusterizados, use a instrução DROP INDEX antes de criar o índice columnstore. A opção DROP EXISTING descarta apenas o índice clusterizado que está sendo convertido. Ele não descarta os índices não clusterizados.
No SQL Server 2012 (11.x) e no SQL Server 2014 (12.x), não é possível criar um índice não clusterizado em um índice 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
Somente para SQL Server 2012 (11.x) e SQL Server 2014 (12.x), você deve descartar os índices não clusterizados para criar o índice 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. Converter uma tabela de fatos grande de rowstore em columnstore
Este exemplo explica como converter uma tabela de fatos grande de uma tabela rowstore em uma tabela columnstore.
Crie uma pequena tabela para usar neste exemplo.
--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);Solte todos os índices não clusterizados da tabela rowstore. Talvez você queira criar scripts para os índices para recriá-los mais tarde.
--Drop all nonclustered indexes DROP INDEX my_index ON dbo.MyFactTable;Converta a tabela rowstore em uma tabela columnstore com um índice columnstore clusterizado.
Primeiro, procure o nome do índice de armazenamento de linhas clusterizado existente. Na Etapa 1, definimos o nome do índice como
IDX_CL_MyFactTable. Se o nome do índice não foi especificado, ele recebeu um nome de índice exclusivo gerado automaticamente. Você pode recuperar o nome gerado automaticamente com a seguinte consulta de exemplo:SELECT i.object_id, i.name, t.object_id, t.name FROM sys.indexes AS i INNER JOIN sys.tables AS t ON i.object_id = t.object_id WHERE i.type_desc = 'CLUSTERED' AND t.name = 'MyFactTable';Opção 1: Solte o índice
IDX_CL_MyFactTableclusterizado existente e convertaMyFactTableem columnstore. Altere o nome do novo índice columnstore clusterizado.--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; GOOpção 2: Converter em columnstore e reutilizar o nome de índice clusterizado rowstore existente.
--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. Converter uma tabela columnstore em uma tabela rowstore com um índice clusterizado
Para converter uma tabela columnstore em uma tabela rowstore com um índice clusterizado, use a instrução CREATE INDEX com a opção DROP_EXISTING.
CREATE CLUSTERED INDEX [IDX_CL_MyFactTable]
ON dbo.[MyFactTable](ProductKey) WITH (DROP_EXISTING = ON);
F. Converter uma tabela columnstore em uma pilha rowstore
Para converter uma tabela columnstore em um heap rowstore, solte o índice columnstore clusterizado. Isso normalmente não é recomendado, mas alguns podem ter usos restritos. Para obter mais informações sobre heaps, consulte Heaps (tabelas sem índices clusterizados).
DROP INDEX [IDX_CL_MyFactTable]
ON dbo.[MyFactTable];
G. Desfragmentar reorganizando o índice columnstore
Há duas maneiras de manter o índice columnstore clusterizado. A partir do SQL Server 2016 (13.x), use ALTER INDEX...REORGANIZE em vez de REBUILD. Para obter mais informações, consulte Columnstore index rowgroup. Em versões anteriores do SQL Server, você pode usar CREATE CLUSTERED COLUMNSTORE INDEX com DROP_EXISTING=ON ou ALTER INDEX e a opção REBUILD. Ambos os métodos alcançaram os mesmos resultados.
Comece determinando o nome do índice columnstore clusterizado em MyFactTable.
SELECT i.object_id,
i.name,
t.object_id,
t.name
FROM sys.indexes AS i
INNER JOIN sys.tables AS t
ON i.object_id = t.object_id
WHERE i.type_desc = 'CLUSTERED COLUMNSTORE'
AND t.name = 'MyFactTable';
Remova a fragmentação executando um REORGANIZE no índice columnstore.
--Rebuild the entire index by using ALTER INDEX and the REBUILD option.
ALTER INDEX IDX_CL_MyFactTable
ON dbo.[MyFactTable] REORGANIZE;
Exemplos de índices columnstore não clusterizados
A. Criar um índice columnstore como um índice secundário em uma tabela rowstore
Este exemplo cria um índice columnstore não clusterizado em uma tabela rowstore. Apenas um índice columnstore pode ser criado nessa situação. O índice columnstore requer armazenamento extra, pois contém uma cópia dos dados na tabela rowstore. Este exemplo cria uma tabela simples e um índice clusterizado rowstore e, em seguida, demonstra a sintaxe da criação de um índice columnstore não clusterizado.
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. Criar um índice columnstore básico não clusterizado usando todas as opções
O exemplo a seguir demonstra a sintaxe da criação de um índice columnstore não clusterizado no grupo de arquivos DEFAULT, especificando os graus máximos de paralelismo (MAXDOP) como 2.
CREATE NONCLUSTERED COLUMNSTORE INDEX csindx_simple
ON SimpleTable(OrderDateKey, DueDateKey, ShipDateKey) WITH (DROP_EXISTING = ON, MAXDOP = 2)
ON "DEFAULT";
GO
C. Criar um índice columnstore não clusterizado com um predicado filtrado
O exemplo a seguir cria um índice columnstore filtrado Production.BillOfMaterials e não clusterizado na tabela do AdventureWorks2025 banco de dados de exemplo. O predicado de filtro pode incluir colunas que não são colunas chave no índice filtrado. O predicado neste exemplo seleciona apenas as linhas onde EndDate é não-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. Alterar os dados em um índice columnstore não clusterizado
Aplica-se a: SQL Server 2012 (11.x) a SQL Server 2014 (12.x).
No SQL Server 2014 (12.x) e versões anteriores, depois de criar um índice columnstore não clusterizado em uma tabela, você não pode modificar diretamente os dados nessa tabela. Uma consulta com INSERT, UPDATE, DELETE ou MERGE falha e retorna uma mensagem de erro. Aqui estão as opções que você pode usar para adicionar ou modificar os dados na tabela:
Desative ou solte o índice columnstore. Em seguida, você pode atualizar os dados na tabela. Se você desabilitar o índice columnstore, poderá reconstruir o índice columnstore quando concluir a atualização dos dados. Por exemplo:
ALTER INDEX mycolumnstoreindex ON dbo.mytable DISABLE; -- update the data in mytable as necessary ALTER INDEX mycolumnstoreindex ON dbo.mytable REBUILD;Carregue dados em uma tabela de preparo que não tenha um índice columnstore. Crie um índice columnstore na tabela de preparo. Alterne a tabela de preparo para uma partição vazia da tabela principal.
Alterne uma partição da tabela com o índice columnstore para uma tabela de preparo vazia. Se houver um índice columnstore na tabela de preparo, desative o índice columnstore. Execute quaisquer atualizações. Crie (ou reconstrua) o índice columnstore. Alterne a tabela de preparo de volta para a partição (agora vazia) da tabela principal.
Exemplos: Azure Synapse Analytics, Analytics Platform System (PDW)
A. Alterar um índice clusterizado para um índice columnstore clusterizado
Usando a instrução CREATE CLUSTERED COLUMNSTORE INDEX com DROP_EXISTING = ON, você pode:
Altere um índice clusterizado para um índice columnstore clusterizado.
Recrie um índice columnstore clusterizado.
Este exemplo cria a xDimProduct tabela como uma tabela rowstore com um índice clusterizado. Em seguida, o exemplo usa CREATE CLUSTERED COLUMNSTORE INDEX para alterar a tabela de uma tabela rowstore para uma tabela 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;
Procure o nome do índice clusterizado criado automaticamente para a nova tabela nos metadados do sistema, usando sys.indexes. Por exemplo:
SELECT i.object_id,
i.name,
t.object_id,
t.name,
i.type_desc
FROM sys.indexes AS i
INNER JOIN sys.tables AS t
ON i.object_id = t.object_id
WHERE i.type_desc = 'CLUSTERED'
AND t.name = 'xdimProduct';
Agora, você pode optar por:
- Solte o índice columnstore clusterizado existente com um nome criado automaticamente e, em seguida, crie um novo índice columnstore clusterizado com um nome definido pelo usuário.
- Solte e substitua o índice existente por um índice columnstore clusterizado, mantendo o mesmo nome gerado pelo sistema, como
ClusteredIndex_1bd8af8797f7453182903cc68df48541.
Por exemplo:
--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. Reconstruir um índice columnstore clusterizado
Com base no exemplo anterior, este exemplo usa CREATE CLUSTERED COLUMNSTORE INDEX para reconstruir o índice columnstore clusterizado existente, chamado cci_xDimProduct.
--Rebuild the existing clustered columnstore index.
CREATE CLUSTERED COLUMNSTORE INDEX cci_xDimProduct
ON xdimProduct WITH (DROP_EXISTING = ON);
C. Alterar o nome de um índice columnstore clusterizado
Para alterar o nome de um índice columnstore clusterizado, solte o índice columnstore clusterizado existente e recrie o índice com um novo nome.
Recomendamos que você limite essa operação a uma tabela pequena ou vazia. Leva muito tempo para descartar um índice columnstore grande e clusterizado e reconstruir com um nome diferente.
Este exemplo faz referência ao cci_xDimProduct índice columnstore clusterizado do exemplo anterior. Este exemplo descarta o cci_xDimProduct índice columnstore clusterizado e recria o índice columnstore clusterizado com o nome 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. Converter uma tabela columnstore em uma tabela rowstore com um índice clusterizado
Pode haver uma situação para a qual você deseja descartar um índice columnstore clusterizado e criar um índice clusterizado. Quando você solta um índice columnstore clusterizado, a tabela é alterada para o formato rowstore. Este exemplo converte uma tabela columnstore em uma tabela rowstore com um índice clusterizado com o mesmo nome. Nenhum dos dados é perdido. Todos os dados vão para a tabela rowstore e as colunas listadas tornam-se as colunas chave no índice clusterizado.
--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. Converter uma tabela columnstore de volta em uma pilha de armazenamento de linha
Use DROP INDEX para descartar o índice columnstore clusterizado e converter a tabela em um heap rowstore. Este exemplo converte a cci_xDimProduct tabela em um heap de armazenamento de linhas. A tabela continua a ser distribuída, mas é armazenada como uma pilha.
--Drop the clustered columnstore index. The table continues to be distributed, but changes to a heap.
DROP INDEX cci_xdimProduct
ON xdimProduct;
F. Criar um índice columnstore clusterizado ordenado em uma tabela sem índice
Um índice columnstore não ordenado cobre todas as colunas por padrão, sem a necessidade de especificar uma lista de colunas. Um índice columnstore ordenado permite especificar a ordem das colunas. A lista não precisa incluir todas as colunas.
Para obter mais informações, consulte Otimização de desempenho com índices columnstore ordenados.
CREATE CLUSTERED COLUMNSTORE INDEX cci
ON Sales.OrderLines ORDER(SHIPDATE);
G. Converter um índice columnstore clusterizado em um índice columnstore clusterizado ordenado
CREATE CLUSTERED COLUMNSTORE INDEX cci
ON Sales.OrderLines ORDER(SHIPDATE) WITH (DROP_EXISTING = ON);
H. Adicionar uma coluna à ordem de um índice columnstore clusterizado ordenado
Você pode especificar uma ordem para as colunas em um índice columnstore. O índice columnstore original ordenado e agrupado foi ordenado apenas na SHIPDATE coluna. O exemplo a seguir adiciona a PRODUCTKEY coluna à ordem. Para obter informações sobre a disponibilidade de índices columnstore ordenados, consulte Columnstore indexes: Overview.
CREATE CLUSTERED COLUMNSTORE INDEX cci
ON Sales.OrderLines ORDER(SHIPDATE, PRODUCTKEY) WITH (DROP_EXISTING = ON);
I. Alterar o ordinal de colunas ordenadas
O índice columnstore original ordenado e agrupado foi ordenado em SHIPDATE, PRODUCTKEY. O exemplo a seguir altera a ordem para PRODUCTKEY, SHIPDATE. Para obter informações sobre a disponibilidade de índices columnstore ordenados, consulte Columnstore indexes: Overview.
CREATE CLUSTERED COLUMNSTORE INDEX cci
ON Sales.OrderLines ORDER(PRODUCTKEY, SHIPDATE) WITH (DROP_EXISTING = ON);
J. Criar um índice columnstore clusterizado ordenado
Você pode criar um índice columnstore clusterizado com chaves de ordenação. Ao criar um índice columnstore clusterizado ordenado, você deve aplicar a dica MAXDOP = 1 de consulta para obter a máxima qualidade de classificação e a menor duração. Para obter informações sobre a disponibilidade de índices columnstore ordenados, consulte Columnstore indexes: Overview.
CREATE CLUSTERED COLUMNSTORE INDEX [OrderedCCI]
ON dbo.FactResellerSalesPartCategoryFull ORDER(EnglishProductSubcategoryName, EnglishProductName) WITH (MAXDOP = 1, DROP_EXISTING = ON);
Conteúdo relacionado
- Índices de columnstore: visão geral
- O que há de novo nos índices de armazenamento em colunas
- Introdução aos índices columnstore para análise operacional em tempo real
- Índices de armazenamento em colunas em armazenagem de dados
- Columnstore indexes - desempenho da consulta
- Columnstore indexes - orientação de design