Suponha que uma tabela contenha apenas números inteiros e tenha um índice columnstore agrupado.
CREATE TABLE cci_account
(
AccountKey int NOT NULL,
UnitSold int,
INDEX ColStore CLUSTERED COLUMNSTORE
);
então parece que somar uma coluna agrupada por outra é sempre rápido em tal tabela, por exemplo
SELECT
AccountKey,
SUM(UnitSold)
FROM
cci_account
GROUP BY
AccountKey;
Por que isso é tão rápido? Meu entendimento da arquitetura columnstore é que os segmentos que contêm AccountKey
não têm ideia de qual UnitSold
valor está em suas linhas. Como, então, o SQL Server consegue agrupar tão rapidamente por AccountKey
? Não consigo imaginar nenhum algoritmo que consiga isso.
Sua intuição está correta: não é um algoritmo sofisticado ou qualquer tipo de mágica. É só que escanear columnstores é muito rápido. Você pode usar um CCI ordenado para ver o impacto de ter os valores AccountKey classificados, o que é significativo. Mas é "rápido" em ambos os casos. EG
Em seguida, observe as estatísticas de tempo para
Que é:
E então recrie-o com AccountKey como a coluna de classificação CCI