SIVARO
ClickHouse

ClickHouse vs PostgreSQL for GROUP BY Queries

--- Two years ago, a fintech client paged me at 2 AM. Their Postgres dashboard query — a simple GROUP BY merchant_id over 400 million transaction rows — ...

clickhousepostgresqlgroupqueries
By Nishaant Dixit
ClickHouse vs PostgreSQL for GROUP BY Queries

ClickHouse vs PostgreSQL for GROUP BY Queries

Cut Infra Costs 64%

Free ClickHouse Audit

Get Started →
ClickHouse vs PostgreSQL for GROUP BY Queries

Two years ago, a fintech client paged me at 2 AM. Their Postgres dashboard query — a simple GROUP BY merchant_id over 400 million transaction rows — had gone from 8 seconds to 6 minutes after a data migration. That query powered a compliance report. It couldn't just be slow.

We rebuilt that aggregation in ClickHouse in an afternoon. Same data. Same grouping. 340 milliseconds.

But here's the part nobody tells you: we kept Postgres running the transactional workload right alongside it. Because ClickHouse would've been the wrong tool for half the queries hitting that same table.

That's the whole game with clickhouse vs postgresql for group by queries. It's not a winner-takes-all fight. It's a question of which query shape you're running, and how much you're willing to pay for it in 2026.

I've shipped both in production. I've watched Postgres column-store extensions change the math. I've watched ClickHouse pricing shift under new licensing. This is what I'd tell a peer who's about to make this call.

Quick definition for the uninitiated: GROUP BY is the SQL clause that collapses rows into buckets — sum revenue by region, count events by user, average latency by endpoint. Everything else in this article is about how fast each database does that collapse, and what it costs you.

Here's what you'll learn: where each engine actually wins on aggregation, a real cost comparison for 2026, and how to decide without regretting it in eighteen months.


Why GROUP BY Is the Query That Exposes Everything

Most benchmarks lie to you. They run SELECT * on a single row, or they measure inserts, and you walk away thinking you know which database is faster.

Aggregation is the honest test.

A GROUP BY query forces the engine to do four things at once: read a huge number of columns, filter, build hash tables or sort groups, and merge partial results across threads. Every architectural decision a database makes — storage layout, execution model, memory management — shows up in that one query.

Postgres stores data row by row. To sum one column, it drags the entire row off disk. That's not a bug. It's the price of MVCC, transactions, and the ability to update a single cell without rewriting a chunk of the table.

ClickHouse stores data column by column. To sum one column, it reads only that column. A thousand-row-wide table becomes a ten-column scan. For aggregation, this is a cheat code.

So when someone asks me "which is faster for GROUP BY," the honest answer is: ClickHouse, by a lot, for analytical aggregations. And then I ask them what else they're running, because that's where the decision actually lives.


The Architecture Gap That Drives Everything

The Architecture Gap That Drives Everything

Let me be blunt about why the performance numbers look the way they do.

Postgres uses a Volcano-style execution model. Rows flow one at a time through operators. It's flexible, it handles complex joins and transactions beautifully, and it's been hardened by thirty years of production use. It was never designed to scan a billion rows and aggregate them in 300ms.

ClickHouse uses vectorized execution. It processes data in batches of thousands of values at once, using SIMD instructions on the CPU. Combine that with MergeTree storage, sparse primary indexes, and aggressive parallelism, and you get an engine that scans columns like it's reading from RAM even when it's on disk.

There's a second, subtler difference: ClickHouse has no row-level locking, no MVCC in the Postgres sense. It appends. That's why it can't do UPDATE ... WHERE id = 5 efficiently (it rewrites whole parts asynchronously), and it's also precisely why it can aggregate so fast. No version chains to walk. No dead tuples to filter.

Postgres, meanwhile, has to check visibility on every row. That's the transaction tax, and it's real.

If you want the deep version of this, ClickHouse's own docs on MergeTree are worth an hour of your time.


ClickHouse vs PostgreSQL for GROUP BY Queries: Head-to-Head

ClickHouse vs PostgreSQL for GROUP BY Queries: Head-to-Head

Let's stop talking theory and put numbers on it. These are ranges I've personally seen across production systems in 2025 and 2026 — not vendor marketing, not synthetic benchmarks. Your mileage will vary with schema, cardinality, and hardware.

Dimension PostgreSQL 17 ClickHouse 25.x
Aggregation over 100M+ rows Seconds to minutes Sub-second to seconds
Storage format Row-oriented (heap) Column-oriented (MergeTree)
Concurrency model High, MVCC, many writers High read concurrency, limited update throughput
Joins Excellent, mature planner Good for large-to-small, weaker for complex multi-join
Updates / deletes Native, transactional Async mutations, expensive
Transactions Full ACID Limited, no cross-table ACID guarantees
Index strategy B-tree, GIN, GiST, BRIN Sparse primary + skip indexes
Best fit OLTP + mixed workloads OLAP, event analytics, dashboards

The gap on pure aggregation is 10x to 100x depending on query and data shape. I've measured 80x on a count distinct over 900M rows. I've also measured 3x on a tiny grouped query where Postgres's cache and single-node overhead won the day.

Don't trust the max multiplier. Trust the shape.

Where Postgres surprise

Part of our ClickHouse series — see every guide in this cluster. Fighting this in production? Explore ClickHouse.

Free · No Commitment · 48-Hour Delivery

Get a free infrastructure audit

2-hour remote session. We audit your data infrastructure, identify what's costing you time and money, and deliver a written roadmap with specific, measurable targets. No pitch.

Book Your Free Audit
N
Nishaant Dixit
Founder & Lead Engineer at SIVARO

Building data-intensive systems since 2018. 200K events/sec pipelines, production RAG systems, Kubernetes infrastructure. LinkedIn →

Start a Project
Need help with ClickHouse?

Expert ClickHouse consulting — schema design, query optimization, cluster operations, and production deployments.

Explore ClickHouse