Índices columnstore: Visão geralColumnstore indexes: Overview

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure simAzure Synapse Analytics (SQL DW) simParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

Os índices columnstore são o padrão para armazenar e consultar tabelas de fatos com armazenamento de dados grandes.Columnstore indexes are the standard for storing and querying large data warehousing fact tables. Esse índice usa armazenamento de dados baseado em coluna e processamento de consultas para obter até 10 vezes mais desempenho de consulta em seu data warehouse em relação ao armazenamento tradicional orientado por linha.This index uses column-based data storage and query processing to achieve gains up to 10 times the query performance in your data warehouse over traditional row-oriented storage. Também é possível obter até 10 vezes mais compactação de dados em relação ao tamanho dos dados descompactados.You can also achieve gains up to 10 times the data compression over the uncompressed data size. A partir do SQL Server 2016 (13.x)SQL Server 2016 (13.x), os índices columnstore permitem a análise operacional, a capacidade de executar análises de alto desempenho em tempo real em uma carga de trabalho transacional.Beginning with SQL Server 2016 (13.x)SQL Server 2016 (13.x), columnstore indexes enable operational analytics: the ability to run performant real-time analytics on a transactional workload.

Confira um cenário relacionado:Learn about a related scenario:

O que é um índice columnstore?What is a columnstore index?

Um columnstore index é uma tecnologia para armazenamento, recuperação e gerenciamento de dados usando um formato de dados colunar, chamado columnstore.A columnstore index is a technology for storing, retrieving, and managing data by using a columnar data format, called a columnstore.

Termos e conceitos essenciaisKey terms and concepts

Os termos e conceitos principais a seguir estão associados aos índices columnstore.The following key terms and concepts are associated with columnstore indexes.

columnstoreColumnstore

Um columnstore são dados logicamente organizados como uma tabela com linhas e colunas e fisicamente armazenados em um formato de dados com reconhecimento de coluna.A columnstore is data that's logically organized as a table with rows and columns, and physically stored in a column-wise data format.

RowstoreRowstore

Um rowstore são dados logicamente organizados como uma tabela com linhas e colunas e fisicamente armazenados em um formato de dados com reconhecimento de linha.A rowstore is data that's logically organized as a table with rows and columns, and physically stored in a row-wise data format. Esse formato é o modo tradicional de armazenar dados da tabela relacional.This format is the traditional way to store relational table data. No SQL ServerSQL Server, rowstore refere-se a uma tabela em que o formato de armazenamento de dados subjacente é um heap, um índice clusterizado ou uma tabela com otimização de memória.In SQL ServerSQL Server, rowstore refers to a table where the underlying data storage format is a heap, a clustered index, or a memory-optimized table.

Observação

Em discussões sobre índices columnstore, os termos rowstore e columnstore são usados para enfatizar o formato do armazenamento de dados.In discussions about columnstore indexes, the terms rowstore and columnstore are used to emphasize the format for the data storage.

RowgroupRowgroup

Um rowgroup é um grupo de linhas que são compactadas no formato columnstore ao mesmo tempo.A rowgroup is a group of rows that are compressed into columnstore format at the same time. Um rowgroup normalmente contém o número máximo de linhas por grupo de linhas que é 1.048.576 linhas.A rowgroup usually contains the maximum number of rows per rowgroup, which is 1,048,576 rows.

Para taxas altas de desempenho e compactação, o índice columnstore fatia a tabela em rowgroups e depois compacta cada um desses rowgroups com um método com reconhecimento de coluna.For high performance and high compression rates, the columnstore index slices the table into rowgroups, and then compresses each rowgroup in a column-wise manner. O número de linhas no rowgroup deve ser grande o suficiente para melhorar as taxas de compactação e pequeno o suficiente para se beneficiar com as operações na memória.The number of rows in the rowgroup must be large enough to improve compression rates, and small enough to benefit from in-memory operations.

segmento de colunaColumn segment

Um segmento de coluna é uma coluna de dados do grupo de linhas.A column segment is a column of data from within the rowgroup.

  • Cada rowgroup contém um segmento de coluna para cada coluna na tabela.Each rowgroup contains one column segment for every column in the table.
  • Cada segmento de coluna é compactado junto e armazenado em meio físico.Each column segment is compressed together and stored on physical media.

Column segmentColumn segment

Índice columnstore clusterizadoClustered columnstore index

Um índice columnstore clusterizado é o armazenamento físico da tabela inteira.A clustered columnstore index is the physical storage for the entire table.

Índice Columnstore ClusterizadoClustered columnstore index

Para reduzir a fragmentação dos segmentos de coluna e melhorar o desempenho, o índice columnstore pode armazenar alguns dados temporariamente em um índice clusterizado, chamado deltastore, e em uma lista árvore B de IDs para linhas excluídas.To reduce fragmentation of the column segments and improve performance, the columnstore index might store some data temporarily into a clustered index called a deltastore and a btree list of IDs for deleted rows. As operações de deltastore são tratadas em segundo plano.The deltastore operations are handled behind the scenes. Para retornar os resultados corretos da consulta, o índice columnstore clusterizado combina os resultados da consulta de columnstore e deltastore.To return the correct query results, the clustered columnstore index combines query results from both the columnstore and the deltastore.

Rowgroup deltaDelta rowgroup

Um rowgroup delta é um índice clusterizado que é usado somente com índices columnstore.A delta rowgroup is a clustered index that's used only with columnstore indexes. Ele melhora o desempenho e a compactação do columnstore armazenando linhas até que o número de linhas alcance um limite e seja, em seguida, movido para o columnstore.It improves columnstore compression and performance by storing rows until the number of rows reaches a threshold and are then moved into the columnstore.

Quando um rowgroup delta alcança o número máximo de linhas, ele fica fechado.When a delta rowgroup reaches the maximum number of rows, it becomes closed. Um processo de movimentação de tupla procura grupos de linhas fechados.A tuple-mover process checks for closed row groups. Se o processo encontrar um rowgroup fechado, ele o compactará e o armazenará no columnstore.If the process finds a closed rowgroup, it compresses the rowgroup and stores it into the columnstore.

DeltastoreDeltastore

Um índice columnstore pode ter mais de um rowgroup delta.A columnstore index can have more than one delta rowgroup. Todos os rowgroups delta são coletivamente chamados de deltastore.All of the delta rowgroups are collectively called the deltastore.

Durante o carregamento em massa grande, a maioria das linhas vai diretamente para o columnstore sem passar pelo deltastore.During a large bulk load, most of the rows go directly to the columnstore without passing through the deltastore. No fim do carregamento em massa, o número de linhas pode ser muito pouco para atender ao tamanho mínimo de um rowgroup, que é de 102.400 linhas.Some rows at the end of the bulk load might be too few in number to meet the minimum size of a rowgroup, which is 102,400 rows. Como resultado, as linhas finais vão para o deltastore, e não para o columnstore.As a result, the final rows go to the deltastore instead of the columnstore. Para carregamento em massa pequeno, menos de 102.400 linhas, todas as linhas vão diretamente para o deltastore.For small bulk loads with less than 102,400 rows, all of the rows go directly to the deltastore.

índice columnstore não clusterizadoNonclustered columnstore index

Um índice columnstore não clusterizado e um índice columnstore clusterizado funcionam da mesma maneira.A nonclustered columnstore index and a clustered columnstore index function the same. A diferença é que um índice não clusterizado é um índice secundário criado em uma tabela rowstore, mas um índice columnstore clusterizado é o armazenamento primário da tabela inteira.The difference is that a nonclustered index is a secondary index that's created on a rowstore table, but a clustered columnstore index is the primary storage for the entire table.

O índice não clusterizado contém uma cópia de parte ou de todas as linhas e colunas na tabela subjacente.The nonclustered index contains a copy of part or all of the rows and columns in the underlying table. O índice é definido como uma ou mais colunas da tabela e tem uma condição opcional que filtra as linhas.The index is defined as one or more columns of the table and has an optional condition that filters the rows.

Um índice não clusterizado columnstore permite análises operacionais em tempo real nas quais a carga de trabalho OLTP usa o índice clusterizado subjacente, enquanto as análises são executadas simultaneamente no índice columnstore.A nonclustered columnstore index enables real-time operational analytics where the OLTP workload uses the underlying clustered index while analytics run concurrently on the columnstore index. Para obter mais informações, veja Introdução ao columnstore para análise operacional em tempo real.For more information, see Get started with columnstore for real-time operational analytics.

Execução em modo de loteBatch mode execution

A execução em modo de lote é um método de processamento de consulta usado para processar várias linhas simultaneamente.Batch mode execution is a query processing method that's used to process multiple rows together. A execução em modo de lote é estreitamente integrada ao formato de armazenamento columnstore e otimizada com base nele.Batch mode execution is closely integrated with, and optimized around, the columnstore storage format. A execução do modo em lote às vezes é conhecida como execução baseada em vetor ou vetorizada.Batch mode execution is sometimes known as vector-based or vectorized execution. Consultas em índices columnstore usam a execução em modo de lote, o que melhora o desempenho de consulta normalmente em duas a quatro vezes.Queries on columnstore indexes use batch mode execution, which improves query performance typically by two to four times. Para saber mais, confira o Guia da arquitetura de processamento de consultas.For more information, see the Query processing architecture guide.

Por que devo usar um índice columnstore?Why should I use a columnstore index?

Um índice columnstore pode fornecer um nível muito alto de compactação de dados, geralmente de 10 vezes, para reduzir consideravelmente os custos de armazenamento em data warehouse.A columnstore index can provide a very high level of data compression, typically by 10 times, to significantly reduce your data warehouse storage cost. Para análises, um índice columnstore oferece um desempenho melhor de ordem de magnitude do que um índice de árvore B.For analytics, a columnstore index offers an order of magnitude better performance than a btree index. Os índice columnstore são o formato de armazenamento de dados preferencial para data warehouse e cargas de trabalho de análise.Columnstore indexes are the preferred data storage format for data warehousing and analytics workloads. A partir do SQL Server 2016 (13.x)SQL Server 2016 (13.x), você pode usar índices columnstore para análises em tempo real da sua carga de trabalho operacional.Starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x), you can use columnstore indexes for real-time analytics on your operational workload.

Motivos pelos quais índices columnstore são tão rápidos:Reasons why columnstore indexes are so fast:

  • Colunas armazenam valores do mesmo domínio e normalmente têm valores semelhantes, o que resulta em altas taxas de compactação.Columns store values from the same domain and commonly have similar values, which result in high compression rates. Os gargalos de E/S em seu sistema são minimizados ou eliminados, e o volume de memória é reduzido consideravelmente.I/O bottlenecks in your system are minimized or eliminated, and memory footprint is reduced significantly.

  • As altas taxas de compactação melhoram o desempenho da consulta usando um menor volume na memória.High compression rates improve query performance by using a smaller in-memory footprint. Por sua vez, o desempenho da consulta pode ser melhorado porque o SQL ServerSQL Server pode realizar mais operações de consulta e dados na memória.In turn, query performance can improve because SQL ServerSQL Server can perform more query and data operations in memory.

  • A execução em lote melhora o desempenho de consulta, normalmente em duas a quatro vezes, processando várias linhas simultaneamente.Batch execution improves query performance, typically by two to four times, by processing multiple rows together.

  • Muitas vezes, as consultas selecionam apenas algumas colunas de uma tabela, o que reduz a E/S total da mídia física.Queries often select only a few columns from a table, which reduces total I/O from the physical media.

Quando devo usar um índice columnstore?When should I use a columnstore index?

Casos de uso recomendados:Recommended use cases:

Como escolher entre um índice rowstore e um índice columnstore?How do I choose between a rowstore index and a columnstore index?

Índices rowstore têm melhor desempenho em consultas nos dados, ao procurar um valor específico ou para consultas em um pequeno intervalo de valores.Rowstore indexes perform best on queries that seek into the data, when searching for a particular value, or for queries on a small range of values. Use índices rowstore com cargas de trabalho transacionais, pois eles tendem a exigir principalmente buscas de tabela em vez de verificações de tabela.Use rowstore indexes with transactional workloads because they tend to require mostly table seeks instead of table scans.

Os índices columnstore oferecem altos ganhos de desempenho para consultas analíticas que examinam grandes quantidades de dados, especialmente em tabelas grandes.Columnstore indexes give high performance gains for analytic queries that scan large amounts of data, especially on large tables. Use índices columnstore em cargas de trabalho de data warehouse e análise, especialmente em tabelas de fatos, pois eles tendem a exigir verificações de tabela completas em vez de buscas de tabela.Use columnstore indexes on data warehousing and analytics workloads, especially on fact tables, because they tend to require full table scans rather than table seeks.

Posso combinar rowstore e columnstore na mesma tabela?Can I combine rowstore and columnstore on the same table?

Sim.Yes. Começando com o SQL Server 2016 (13.x)SQL Server 2016 (13.x), você pode criar um índice columnstore não clusterizado atualizável em uma tabela rowstore.Beginning with SQL Server 2016 (13.x)SQL Server 2016 (13.x), you can create an updatable nonclustered columnstore index on a rowstore table. O índice columnstore armazena uma cópia das colunas selecionadas, então você precisa de espaço adicional para esses dados, mas os dados selecionados serão 10 vezes compactados, em média.The columnstore index stores a copy of the selected columns, so you need extra space for this data, but the selected data is compressed on average 10 times. Você pode executar análises no índice columnstore e transações no índice rowstore ao mesmo tempo.You can run analytics on the columnstore index and transactions on the rowstore index at the same time. O columnstore é atualizado quando os dados são alterados na tabela rowstore, assim, ambos os índices trabalham com os mesmos dados.The columnstore is updated when data changes in the rowstore table, so both indexes work against the same data.

A partir do SQL Server 2016 (13.x)SQL Server 2016 (13.x), você pode ter um ou mais índices rowstore não clusterizado em um índice columnstore de índice, e executar pesquisas de tabela eficientes no columnstore subjacente.Beginning with SQL Server 2016 (13.x)SQL Server 2016 (13.x), you can have one or more nonclustered rowstore indexes on a columnstore index and perform efficient table seeks on the underlying columnstore. Outras opções também são disponibilizadas.Other options become available too. Por exemplo, você pode impor uma restrição de chave primária usando uma restrição UNIQUE na tabela rowstore.For example, you can enforce a primary key constraint by using a UNIQUE constraint on the rowstore table. Como um valor não exclusivo não pode ser inserido na tabela rowstore, o SQL ServerSQL Server não poderá inserir o valor no columnstore.Because a non-unique value fails to insert into the rowstore table, SQL ServerSQL Server can't insert the value into the columnstore.

MetadadosMetadata

Todas as colunas em um índice columnstore são armazenadas nos metadados como colunas incluídas.All of the columns in a columnstore index are stored in the metadata as included columns. O índice columnstore não tem colunas de chave.The columnstore index doesn't have key columns.

sys.indexes (Transact-SQL)sys.indexes (Transact-SQL) sys.index_columns (Transact-SQL)sys.index_columns (Transact-SQL)
sys.partitions (Transact-SQL)sys.partitions (Transact-SQL) sys.internal_partitions (Transact-SQL)sys.internal_partitions (Transact-SQL)
sys.column_store_segments (Transact-SQL)sys.column_store_segments (Transact-SQL) sys.column_store_dictionaries (Transact-SQL)sys.column_store_dictionaries (Transact-SQL)
sys.column_store_row_groups (Transact-SQL)sys.column_store_row_groups (Transact-SQL) sys.dm_db_column_store_row_group_operational_stats (Transact-SQL)sys.dm_db_column_store_row_group_operational_stats (Transact-SQL)
sys.dm_db_column_store_row_group_physical_stats (Transact-SQL)sys.dm_db_column_store_row_group_physical_stats (Transact-SQL) sys.dm_column_store_object_pool (Transact-SQL)sys.dm_column_store_object_pool (Transact-SQL)
sys.dm_db_column_store_row_group_operational_stats (Transact-SQL)sys.dm_db_column_store_row_group_operational_stats (Transact-SQL) sys.dm_db_index_operational_stats (Transact-SQL)sys.dm_db_index_operational_stats (Transact-SQL)
sys.dm_db_index_physical_stats (Transact-SQL)sys.dm_db_index_physical_stats (Transact-SQL)

Todas as tabelas relacionais usam rowstore como formato de dados subjacente, a menos que você as especifique como um índice columnstore clusterizado.All relational tables, unless you specify them as a clustered columnstore index, use rowstore as the underlying data format. CREATE TABLE cria uma tabela rowstore, a menos que a opção WITH CLUSTERED COLUMNSTORE INDEX seja especificada.CREATE TABLE creates a rowstore table unless you specify the WITH CLUSTERED COLUMNSTORE INDEX option.

Ao criar uma tabela com a instrução CREATE TABLE, você pode criar a tabela como um columnstore especificando a opção WITH CLUSTERED COLUMNSTORE INDEX.When you create a table with the CREATE TABLE statement, you can create the table as a columnstore by specifying the WITH CLUSTERED COLUMNSTORE INDEX option. Caso já tenha uma tabela rowstore e deseje convertê-la em um columnstore, use a instrução CREATE COLUMNSTORE INDEX.If you already have a rowstore table and want to convert it to a columnstore, you can use the CREATE COLUMNSTORE INDEX statement.

TarefaTask Tópicos de referênciaReference topics ObservaçõesNotes
Crie uma tabela como columnstore.Create a table as a columnstore. CREATE TABLE (Transact-SQL)CREATE TABLE (Transact-SQL) Começando com o SQL Server 2016 (13.x)SQL Server 2016 (13.x), você pode criar a tabela como um índice columnstore clusterizado.Beginning with SQL Server 2016 (13.x)SQL Server 2016 (13.x), you can create the table as a clustered columnstore index. Não é preciso criar primeiro uma tabela rowstore e convertê-la em columnstore.You don't have to first create a rowstore table and then convert it to columnstore.
Crie uma tabela de memória com um índice columnstore.Create a memory table with a columnstore index. CREATE TABLE (Transact-SQL)CREATE TABLE (Transact-SQL) A partir do SQL Server 2016 (13.x)SQL Server 2016 (13.x), você pode criar uma tabela com otimização na memória com um índice columnstore.Beginning with SQL Server 2016 (13.x)SQL Server 2016 (13.x), you can create a memory-optimized table with a columnstore index. O índice columnstore também pode ser adicionado após a criação da tabela, usando a sintaxe ALTER TABLE ADD INDEX.The columnstore index can also be added after the table is created by using the ALTER TABLE ADD INDEX syntax.
Converta uma tabela rowstore em columnstore.Convert a rowstore table to a columnstore. CREATE COLUMNSTORE INDEX (Transact-SQL)CREATE COLUMNSTORE INDEX (Transact-SQL) Converta uma pilha ou árvore binária existente em columnstore.Convert an existing heap or binary tree to a columnstore. Exemplos mostram como lidar com os índices existentes e o nome do índice ao realizar essa conversão.Examples show how to handle existing indexes and also the name of the index when performing this conversion.
Converta uma tabela columnstore em rowstore.Convert a columnstore table to a rowstore. CRIAR O ÍNDICE CLUSTERIZADO (Transact-SQL) ou Converter uma tabela columnstore novamente em um heap rowstoreCREATE CLUSTERED INDEX (Transact-SQL) or Convert a columnstore table back to a rowstore heap Geralmente, essa conversão não é necessária, mas pode haver ocasiões em que você precisa realizá-la.Usually this conversion isn't necessary, but there can be times when you need to convert. Exemplos mostram como converter um columnstore em uma pilha ou um índice clusterizado.Examples show how to convert a columnstore to a heap or clustered index.
Crie um índice columnstore em uma tabela rowstore.Create a columnstore index on a rowstore table. CREATE COLUMNSTORE INDEX (Transact-SQL)CREATE COLUMNSTORE INDEX (Transact-SQL) Uma tabela rowstore pode ter um índice columnstore.A rowstore table can have one columnstore index. Começando com o SQL Server 2016 (13.x)SQL Server 2016 (13.x), o índice columnstore pode ter uma condição filtrada.Beginning with SQL Server 2016 (13.x)SQL Server 2016 (13.x), the columnstore index can have a filtered condition. Exemplos mostram a sintaxe básica.Examples show the basic syntax.
Crie índices de alto desempenho para análises operacionais.Create performant indexes for operational analytics. Introdução ao columnstore para análise operacional em tempo realGet started with columnstore for real-time operational analytics Descreve como criar índices de árvore B e columnstore complementares para que consultas OLTP usem índices de árvore B e consultas de análise usem índices columnstore.Describes how to create complementary columnstore and btree indexes, so that OLTP queries use btree indexes and analytics queries use columnstore indexes.
Crie índices columnstore de alto desempenho para data warehouse.Create performant columnstore indexes for data warehousing. Índices columnstore para data warehouseColumnstore indexes for data warehousing Descreve como usar índices de árvore B em tabelas columnstore para criar consultas de data warehouse de alto desempenho.Describes how to use btree indexes on columnstore tables to create performant data warehousing queries.
Use um índice de árvore B para impor uma restrição de chave primária em um índice columnstore.Use a btree index to enforce a primary key constraint on a columnstore index. Índices columnstore para data warehouseColumnstore indexes for data warehousing Mostra como combinar índices columnstore e de árvore B para impor restrições de chave primária no índice columnstore.Shows how to combine btree and columnstore indexes to enforce primary key constraints on the columnstore index.
Remover um índice columnstore.Drop a columnstore index. DROP INDEX (Transact-SQL)DROP INDEX (Transact-SQL) A remoção de um índice columnstore usa a sintaxe DROP INDEX padrão usada pelos índices de árvore B.Dropping a columnstore index uses the standard DROP INDEX syntax that btree indexes use. A remoção de um índice columnstore clusterizado converte a tabela columnstore em uma pilha.Dropping a clustered columnstore index converts the columnstore table to a heap.
Excluir uma linha de um índice columnstore.Delete a row from a columnstore index. DELETE (Transact-SQL)DELETE (Transact-SQL) Use DELETE (Transact-SQL) para excluir uma linha.Use DELETE (Transact-SQL) to delete a row.

linha columnstore : SQL ServerSQL Server marca a linha como excluída logicamente, mas não recupera o armazenamento físico da linha até que o índice seja recriado.columnstore row: SQL ServerSQL Server marks the row as logically deleted, but doesn't reclaim the physical storage for the row until the index is rebuilt.

linha deltastore : SQL ServerSQL Server exclui a linha lógica e fisicamente.deltastore row: SQL ServerSQL Server logically and physically deletes the row.
Atualizar uma linha no índice columnstore.Update a row in the columnstore index. UPDATE (Transact-SQL)UPDATE (Transact-SQL) Use UPDATE (Transact-SQL) para atualizar uma linha.Use UPDATE (Transact-SQL) to update a row.

linha columnstore: SQL ServerSQL Server marca a linha como excluída logicamente e insere a linha atualizada no deltastore.columnstore row: SQL ServerSQL Server marks the row as logically deleted and then inserts the updated row into the deltastore.

linha deltastore : SQL ServerSQL Server atualiza a linha no deltastore.deltastore row: SQL ServerSQL Server updates the row in the deltastore.
Carregar dados em um índice columnstore.Load data into a columnstore index. Carregamento de dados dos índices columnstoreColumnstore indexes data loading
Força todas as linhas no deltastore a ir para o columnstore.Force all rows in the deltastore to go into the columnstore. ALTER INDEX (Transact-SQL) ... REBUILDALTER INDEX (Transact-SQL) ... REBUILD

Reorganizar e recompilar índicesReorganize and Rebuild Indexes
ALTER INDEX com a opção REBUILD força todas as linhas a ir para o columnstore.ALTER INDEX with the REBUILD option forces all rows to go into the columnstore.
Desfragmentar um índice columnstore.Defragment a columnstore index. ALTER INDEX (Transact-SQL)ALTER INDEX (Transact-SQL) ALTER INDEX ... REORGANIZE desfragmenta os índices columnstore online.ALTER INDEX ... REORGANIZE defragments columnstore indexes online.
Mescle tabelas com índices columnstore.Merge tables with columnstore indexes. MERGE (Transact-SQL)MERGE (Transact-SQL)

Confira tambémSee also

Carregamento de dados dos índices columnstore Columnstore indexes data loading
Resumo de recursos com versão dos índices columnstore Columnstore indexes versioned feature summary
Desempenho de consultas de índices columnstore Columnstore indexes query performance
Introdução ao columnstore para análise operacional em tempo real Get started with columnstore for real-time operational analytics
Índices columnstore para data warehouse Columnstore indexes for data warehousing
Desfragmentação de índices columnstore Columnstore indexes defragmentation
Guia de criação de índice do SQL Server SQL Server index design guide
Arquitetura de índices columnstoreColumnstore index architecture