Snowflake, BigQuery & Databricks · Azure Synapse & Fabric

Clustered Columnstore Indexes in Synapse

azureEasysynapsecolumnstoreccirowgroups

Interview question

What is a Clustered Columnstore Index (CCI) in Synapse, and why is it the default table structure?

How to answer

The short answer

A Clustered Columnstore Index (CCI) is the default storage format for tables created in Azure Synapse Dedicated SQL Pool. Unlike traditional row-based relational databases that store entire rows together on eight-kilobyte pages, a columnstore index organizes and compresses data column by column.

Physical architecture: Rowgroups and Segments

When data is loaded into a CCI table, Synapse groups rows into large chunks called rowgroups, ideally holding roughly 1 million rows each (1,048,576 rows).

Within each rowgroup, every column is sliced into an independent physical column segment. Synapse applies high-ratio compression algorithms to each segment separately.

Why CCI dominates analytical workloads

  • Columnar I/O reduction: If an analytical query runs SELECT SUM(order_amount) FROM dbo.fact_sales, Synapse reads only the disk segments containing order_amount. The segments for the other 40 columns in the table are never touched by disk heads, cutting read I/O by 80% to 95%.
  • Segment elimination: For every column segment, Synapse stores min and max metadata in memory. If a query filters on order_date >= '2024-06-01', the query engine skips all rowgroups whose maximum date is prior to June 2024 without decompressing them.
  • High compression ratios: Storing identical together allows compression algorithms to achieve 5x to 10x space savings compared to uncompressed row stores.