ClickHouse, explained in pictures.
Visual guides to how ClickHouse stores, skips, merges and serves data—so you can use it efficiently from day one.
The short answer: it reads less.
One query, three cuts. Partitions, indexes and columns take a 2 TiB table down to about 4.5 MiB.
Columnar storage
Read only the columns you need.
Each column is its own compressed file. The same query opens 4 of them and skips tenant_id and the wide payload: about 38 GiB instead of 5 TiB, before any rows are skipped.
Primary index · skip index
Sort once. Skip granules before reading.
Two small indexes decide what to read. The same query: the primary index finds the key range, a skip index drops granules whose min/max cannot match. Across the table that leaves 192 of ≈ 1.66 M granules; the 8 below show how.
Materialized views · table engines
Prepare results at insert time.
Views feed small, pre-aggregated tables. Each insert is summarized once, as it arrives, and the table engine merges the summaries in the background. Dashboards read a few hundred rows instead of billions.