Skip to content

OLAP Comparison

QueryParticleDBDuckDBPostgreSQLPDB vs DuckDB
COUNT(*)0.04ms<1ms1,075msMetadata
SUM(rating)0.08ms7ms1,379ms90x
AVG GROUP BY movie (17K groups)31.9ms68ms2,665ms2.1x
COUNT GROUP BY rating (5 groups)5.2ms19ms2,221ms3.7x
GROUP BY 500K groups11.5ms12msParity

ParticleDB wins 5 of 7 queries vs DuckDB.

QueryParticleDBDuckDBPostgreSQLPDB vs DuckDB
COUNT(*)0.04ms<1ms1,157msMetadata
SUM(dwell_time)0.06ms10ms1,651ms170x
GROUP BY session_id (5M groups)66ms89ms11,137ms1.3x
GROUP BY action (4 groups)20ms24ms3,045ms1.2x
Filter + aggregate8.8ms9msParity

ParticleDB wins 7 of 8 queries vs DuckDB.

QueryParticleDBDuckDBPDB vs DuckDB
SUM(distance)0.06ms10ms156x
AVG GROUP BY carrier (20 groups)27ms33ms1.2x
Filter + 3 aggregates10ms23ms2.3x
GROUP BY 500K groups71ms96ms1.4x

DuckDB is faster on some query patterns:

  • Multi-column GROUP BY with millions of groups: DuckDB’s morsel-driven vectorized execution handles very high cardinality GROUP BY ~2-3x faster
  • Complex JOIN + aggregate: DuckDB’s compiled pipeline avoids per-row function dispatch overhead
  • String-heavy operations: DuckDB’s string dictionary encoding is more tightly integrated

We’re actively working on vectorized hash aggregation to close these gaps.

TechniqueBenefit
Zone map precomputationUngrouped SUM/AVG/MIN/MAX in O(1)
Contiguous flat columnsHardware prefetcher-friendly scans
DictU32 string encoding4-byte keys for string GROUP BY
SIMD mask accumulationBranchless low-cardinality GROUP BY
Radix-partitioned hash tablesL2 cache-friendly for high cardinality
Tree-reduction mergeO(log N) parallel merge instead of O(N)