Partilhar via


Quais são as novidades nos índices columnstore

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsArmazém no Microsoft FabricBase de dados SQL no Microsoft Fabric

Saiba quais as funcionalidades da loja de colunas disponíveis em plataformas SQL e versões do SQL Server.

Resumo de funcionalidades para lançamentos de produtos

Esta tabela resume as principais características dos índices columnstore e os produtos em que estão disponíveis.

Para a disponibilidade de funcionalidades no Azure SQL Managed Instance com uma política de atualização do SQL Server, consulte a coluna da versão correspondente do SQL Server.

Recurso de índices Columnstore SQL Server 2016 (13.x)1 SQL Server 2017 (14.x) SQL Server 2019 (15.x) SQL Server 2022 (16.x) SQL Server 2025 (17.x) Banco de Dados SQL do Azure2 e Instância Gerenciada SQL do AzureAUTD Azure Synapse Analytics and Warehouse in Microsoft Fabric
Execução em modo batch para consultas multi-threaded3 Yes Yes Yes Yes Yes Yes Yes
Execução em modo batch para consultas de thread único Yes Yes Yes Yes Yes Yes Yes
Opção de compressão de arquivo Yes Yes Yes Yes Yes Yes Yes
Isolamento de snapshot e isolamento de snapshot com leitura confirmada Yes Yes Yes Yes Yes Yes Yes
Especifique o índice columnstore ao criar uma tabela Yes Yes Yes Yes Yes Yes Yes
O Always On suporta índices de armazenamento em colunas Yes Yes Yes Yes Yes Yes Yes
O Always On secundário legível suporta um índice columnstore não clusterizado de leitura apenas. Yes Yes Yes Yes Yes Yes Yes
O secundário legível do Always On suporta índices columnstore atualizáveis Yes Yes Yes Yes Yes Não Não
Índice columnstore não clusterizado só de leitura em heap ou árvore B Sim4 Sim4 Sim4 Sim4 Sim4 Sim4 Sim4
Índice de armazenamento por coluna não agrupado e atualizável em heap ou árvore B Yes Yes Yes Yes Yes Yes Yes
Índices adicionais de árvore B permitidos em uma pilha ou árvore B que tenha um índice columnstore não clusterizado Yes Yes Yes Yes Yes Yes Yes
Índice clusterizado e atualizável de columnstore Yes Yes Yes Yes Yes Yes Yes
Índice de árvore B num índice columnstore clusterizado Yes Yes Yes Yes Yes Yes Yes
Índice de armazenamento por colunas em uma tabela otimizada para memória Yes Yes Yes Yes Yes Yes Yes
A definição do índice columnstore não clusterizado suporta a utilização de uma condição filtrada Yes Yes Yes Yes Yes Yes Yes
Opção de atraso de compressão para índices columnstore em CREATE TABLE e ALTER TABLE Yes Yes Yes Yes Yes Yes Yes
Suporte para o tipo nvarchar(max) Não Yes Yes Yes Yes Yes 5
O índice Columnstore pode ter uma coluna computada não persistente Não Yes Yes Yes Yes Não Não
Suporte para mesclagem em segundo plano do movimentador de tuplas Não Não Yes Yes Yes Yes Yes
Índices columnstore agrupados ordenados Não Não Não Yes Yes Yes Yes
Índices columnstore não clusterizados ordenados Não Não Não Não Yes Yes Não
Criação e reconstrução do índice columnstore online Não Não Não Yes Yes Yes Não
Criar e reconstruir o índice columnstore ordenado online Não Não Não Não Yes Yes Não

1 Para o SQL Server 2016 (13.x) SP1 e versões posteriores, os índices columnstore estão disponíveis em todas as edições. Para o SQL Server 2016 (13.x) (antes do SP1) e versões anteriores, os índices columnstore só estão disponíveis na Enterprise Edition. 2 Para o Banco de Dados SQL do Azure, os índices columnstore estão disponíveis nas camadas DTU Premium, DTU Standard - S3 e superior e todas as camadas vCore. 3 O grau de paralelismo (DOP) para operações de em modo de lote é limitado a 2 para SQL Server Standard Edition e 1 para SQL Server Web e Express Editions. Essa limitação refere-se a índices columnstore criados em tabelas baseadas em disco e tabelas com otimização de memória. 4 Para criar um índice columnstore não clusterizado de leitura exclusiva, armazene o índice em um grupo de arquivos de leitura exclusiva. 5 Não há suporte em pools SQL dedicados, mas é suportado em pool SQL sem servidor.

SQL Server 2025 (17.x)

O SQL Server 2025 (17.x) adicionou estas funcionalidades:

  • O columnstore ordenado não clusterizado melhora o desempenho das consultas em análises operacionais em tempo real.

    Para obter mais informações, consulte Otimização de desempenho com índices columnstore ordenados.

  • Um índice columnstore ordenado (agrupado ou não clusterizado) agora pode ser criado ou reconstruído online.

    Você pode especificar ONLINE = ON na instrução CREATE INDEX quando a ORDER cláusula está presente. Para obter mais informações sobre operações de índice online, consulte Executar operações de índice online.

  • Qualidade de classificação aprimorada para índices columnstore agrupados ordenados.

    No SQL Server 2025 (17.x), quando um índice columnstore clusterizado ordenado é criado online, o algoritmo de ordenação utiliza tempdb em vez de ordenar os dados na memória. Se MAXDOP for igual a 1 para a compilação de índice, a compilação produzirá um índice columnstore clusterizado totalmente ordenado, sem segmentos sobrepostos. Isso pode melhorar o desempenho das consultas usando o índice. No entanto, a construção do índice pode levar mais tempo devido à E/S adicional necessária para que os vazamentos cheguem ao tempdb. Se já existir um índice columnstore clusterizado, as consultas podem continuar a usá-lo enquanto a reconstrução do índice online totalmente ordenada estiver em andamento.

    Para mais informações, consulte Reduzir sobreposição de segmentos.

  • Operações melhoradas de redução de bases de dados e ficheiros.

    Em versões anteriores do SQL Server, quando um índice columnstore clusterizado inclui colunas com tipos de dados LOB, como varchar(max), nvarchar(max), varbinary(max), as páginas de dados usadas por essas colunas não podem ser movidas pelas operações de redução. Como resultado, o shrink pode ser menos eficaz na recuperação de espaço nos arquivos de dados.

    No SQL Server 2025 (17.x), ambos os comandos DBCC SHRINKDATABASE e DBCC SHRINKFILE podem mover páginas de dados usadas pelas colunas LOB nos índices columnstore.

SQL Server 2022 (16.x)

O SQL Server 2022 (16.x) adicionou estes recursos:

  • Os índices columnstore agrupados ordenados melhoram o desempenho de consultas com base em predicados de coluna ordenados. Os índices columnstore ordenados podem melhorar o desempenho ignorando segmentos de dados por completo. Isso pode reduzir drasticamente a E/S necessária para concluir consultas em dados de columnstore. Para mais informações, consulte a eliminação do segmento. Para obter mais informações, consulte CREATE COLUMNSTORE INDEX e Ajuste de desempenho com índices columnstore ordenados.
  • A eliminação de grupos de linhas de um columnstore clusterizado para strings usando pushdown de predicado utiliza valores limítrofes para otimizar pesquisas de cadeias de caracteres. Todos os índices columnstore se beneficiam da eliminação aprimorada de segmentos por tipo de dados. A partir do SQL Server 2022 (16.x), estas capacidades de eliminação de segmento se estendem aos tipos de dados string, binário e GUID, e ao tipo de dados datetimeoffset para escalas superiores a dois. Anteriormente, a eliminação de segmentos columnstore aplicava-se apenas aos tipos de dados numéricos, de data e hora, e ao tipo de dados datetimeoffset com escala menor ou igual a dois. Depois de atualizar para uma versão do SQL Server que suporta eliminação de segmentos min/max de strings (SQL Server 2022 (16.x) e versões posteriores), o índice columnstore não tira proveito desta funcionalidade até ser reconstruído usando ALTER INDEX REBUILD ou CREATE INDEX WITH (DROP_EXISTING = ON).
  • Eliminação de grupos de linhas Columnstore para o prefixo de predicados LIKE, como, por exemplo, o column LIKE 'string%'. A eliminação de segmentos não é suportada para a utilização de LIKE sem prefixo, tal como column LIKE '%string'.
  • Para obter mais informações sobre recursos adicionados, consulte Novidades no SQL Server 2022.

SQL Server 2019 (15.x)

O SQL Server 2019 (15.x) adiciona estes novos recursos:

Functional

A partir do SQL Server 2019 (15.x), o mover de tuplas é ajudado por uma tarefa de fusão em segundo plano que comprime automaticamente grupos de linhas delta abertos menores que existem há algum tempo, conforme determinado por um limiar interno, ou funde grupos de linhas comprimidos de onde um grande número de linhas foi eliminado. Anteriormente, uma operação de reorganização de índice era necessária para mesclar grupos de linhas com dados parcialmente excluídos. Isso melhora a qualidade do índice columnstore ao longo do tempo.

SQL Server 2017 (14.x)

O SQL Server 2017 (14.x) adiciona esses novos recursos.

Functional

  • O SQL Server 2017 (14.x) oferece suporte a colunas computadas não persistentes em índices columnstore clusterizados. Índices de columnstore clusterizados não suportam colunas computadas persistentes. Não é possível criar um índice de coluna não agrupado numa coluna computada.

SQL Server 2016 (13.x)

O SQL Server 2016 (13.x) adiciona aprimoramentos importantes para melhorar o desempenho e a flexibilidade dos índices columnstore. Essas melhorias aprimoram os cenários de armazenamento de dados e permitem análises operacionais em tempo real.

Functional

  • Uma tabela rowstore pode ter um índice columnstore não clusterizado que seja atualizável. Anteriormente, o índice columnstore não clusterizado era de apenas leitura.

  • A definição do índice de armazenamento em coluna não clusterizado oferece suporte ao uso de uma condição filtrada. Para minimizar o impacto no desempenho da adição de um índice columnstore em uma tabela OLTP, use uma condição filtrada para criar um índice columnstore não clusterizado somente nos dados frios de sua carga de trabalho operacional.

  • Uma tabela na memória pode ter um índice de columnstore. Você pode criá-la quando a tabela for criada ou adicioná-la posteriormente com ALTER TABLE. Anteriormente, apenas uma tabela baseada em disco podia ter um índice colunar.

  • Um índice columnstore clusterizado pode ter um ou mais índices rowstore não clusterizados. Anteriormente, o índice de columnstore não suportava índices não agrupados. O SQL Server mantém automaticamente os índices não clusterizados para operações DML.

  • Suporte para chaves primárias e chaves estrangeiras utilizando um índice B-tree para aplicar estas restrições num índice columnstore clusterizado.

  • Os índices Columnstore têm uma opção de adiamento da compressão que minimiza o impacto da carga de trabalho transacional na análise operacional em tempo real. Essa opção permite alterar frequentemente as linhas para estabilizar antes de compactá-las no columnstore. Para mais detalhes, consulte CRIAR ÍNDICE COLUMNSTORE e Comece com os índices columnstore para análises operacionais em tempo real.

Desempenho para o nível de compatibilidade de banco de dados 120 ou 130

  • Os índices Columnstore suportam o nível de isolamento de instantâneo confirmado (Read Committed Snapshot Isolation Level, RCSI) e o isolamento de instantâneo (Snapshot Isolation, SI). Isso permite consultas de análise transacionais consistentes sem bloqueios.

  • Columnstore suporta desfragmentação de índice removendo linhas excluídas sem a necessidade de reconstruir explicitamente o índice. A instrução ALTER INDEX ... REORGANIZE remove linhas eliminadas, com base numa política definida internamente, do columnstore numa operação online

  • Os índices Columnstore podem ser acessíveis numa réplica secundária legível de Always On. Você pode melhorar o desempenho da análise operacional transferindo consultas de análise para uma réplica secundária Always On.

  • O Aggregate Pushdown calcula as funções agregadas MIN, MAX, SUM, COUNT, e AVG durante escanamentos de tabela quando o tipo de dado utiliza no máximo 8 bytes e não é um tipo de dados de texto. O suporte a "pushdown" agregado é fornecido com ou sem a cláusula GROUP BY tanto para índices columnstore agrupados como para índices columnstore não agrupados. No SQL Server, esse aprimoramento é reservado para a edição Enterprise.

  • O pushdown de predicados de cadeias acelera consultas que comparam cadeias do tipo varchar/char ou nvarchar/nchar. Isso se aplica aos operadores de comparação comuns e inclui operadores como LIKE que usam filtros de bitmap. Isso funciona com todas as classificações suportadas. No SQL Server, esse aprimoramento é reservado para a edição Enterprise.

  • Aprimoramentos para operações em modo de lote aproveitando os recursos de hardware baseados em vetor. O Mecanismo de Banco de Dados deteta o nível de suporte da CPU para as extensões de hardware AVX 2 (Advanced Vetor Extensions) e SSE 4 (Streaming SIMD Extensions 4) e as usa, se suportadas. No SQL Server, esse aprimoramento é reservado para a edição Enterprise.

Desempenho para o nível de compatibilidade de banco de dados 130

  • Novo suporte de execução em modo batch para consultas usando qualquer uma destas operações:

    • SORT
    • Agregados com múltiplas funções distintas. Alguns exemplos: COUNT/COUNT, AVG/SUM, CHECKSUM_AGG, STDEV/STDEVP
    • Funções de agregação de janelas: COUNT, COUNT_BIG, SUM, AVG, MIN, MAXe CLR
    • Agregações definidas pelo usuário da janela: CHECKSUM_AGG, STDEV, STDEVP, VAR, VARPe GROUPING
    • Funções analíticas de agregado de janelas: LAG, LEAD, FIRST_VALUE, LAST_VALUE, PERCENTILE_CONT, PERCENTILE_DISC, CUME_DIST, e PERCENT_RANK
  • Consultas de thread único executadas sob MAXDOP 1 ou com um plano de consulta serial são executadas em modo de lote. Anteriormente, apenas consultas multiencadeadas eram executadas com execução em lote.

  • As consultas em tabelas otimizadas para memória podem ter planos paralelos no modo SQL InterOp, tanto ao aceder a dados em rowstore quanto num índice columnstore.

Supportability

Estas visualizações do sistema são novas para columnstore:

Esses DMVs baseados em OLTP na memória contêm atualizações para columnstore:

Limitations

  • Para tabelas em memória, um índice columnstore deve incluir todas as colunas; O Column Store Index não pode ter uma condição filtrada.
  • Para tabelas na memória, as consultas em índices columnstore são executadas somente no modo de interoperabilidade e não no modo de compilação nativo. A execução paralela é suportada.

Problemas conhecidos

Aplica-se a: SQL Server 2022 (16.x) e versões anteriores, Azure SQL ManagedInstance 2022

  • As páginas de dados usadas por colunas LOB (varbinary(max), varchar(max) e nvarchar(max)) em segmentos columnstore compactados não podem ser movidas por DBCC SHRINKDATABASE e DBCC SHRINKFILE. Este problema está resolvido no SQL Server 2025 (17.x).

SQL Server 2014 (12.x)

O SQL Server 2014 (12.x) introduziu o índice columnstore clusterizado como o formato de armazenamento primário. Isso permitia carregamentos regulares, bem como operações de atualização, exclusão e inserção.

  • A tabela pode usar um índice columnstore clusterizado como armazenamento principal da tabela. Nenhum outro índice é permitido na tabela, mas o índice columnstore clusterizado é atualizável para que você possa executar carregamentos regulares e fazer alterações em linhas individuais.
  • O índice columnstore não clusterizado continua a ter a mesma funcionalidade do SQL Server 2012 (11.x), exceto para operadores adicionais que agora podem ser executados no modo de lote. Ainda não é atualizável, exceto pela reconstrução e usando a troca de partições. O índice columnstore não clusterizado é suportado apenas em tabelas baseadas em disco e não em tabelas na memória.
  • O índice columnstore clusterizado e não clusterizado tem uma opção de compressão arquivística que compacta ainda mais os dados. A opção de arquivamento é útil para reduzir o tamanho dos dados na memória e no disco, mas diminui o desempenho da consulta. Ele funciona bem para dados que são acessados com pouca frequência.
  • O índice columnstore clusterizado e o índice columnstore não clusterizado funcionam de forma muito semelhante, ambos os índices usam o mesmo formato de armazenamento colunar, o mesmo mecanismo de processamento de consultas e o mesmo conjunto de vistas de gerenciamento dinâmico. A diferença está nos tipos de índices primário e secundário, e o índice columnstore não clusterizado é de leitura apenas.
  • Esses operadores são executados em modo de lote para consultas multithreaded: análise, filtro, projeção, junção, agrupamento e união total.

SQL Server 2012 (11.x)

O SQL Server 2012 (11.x) introduziu o índice columnstore não clusterizado como outro tipo de índice em tabelas rowstore e processamento em lote para consultas em dados columnstore.

  • Uma tabela rowstore pode ter um índice columnstore não clusterizado.
  • O índice columnstore é de apenas leitura. Depois de criar o índice columnstore, não pode atualizar a tabela usando operações de INSERT, DELETE e UPDATE; para realizar estas operações, deve eliminar o índice, atualizar a tabela e reconstruir o índice columnstore. Você pode carregar dados adicionais na tabela utilizando a técnica de troca de partições. A vantagem da comutação de partições é que é possível carregar dados sem necessitar de eliminar e reconstruir o índice columnstore.
  • O índice columnstore sempre requer armazenamento extra, normalmente 10% adicionais sobre rowstore, porque armazena uma cópia dos dados.
  • O processamento em lote oferece 2x ou melhor desempenho de consultas, mas só está disponível para execução paralela de consultas.