# ClickBench 10M: Hotdata vs Neon Source: https://www.hotdata.dev/blog/clickbench-10m-hotdata-vs-neon-no-indexes Published: Jun 30, 2026 Author: Divya Ranganathan Site index: https://www.hotdata.dev/llms.txt We ran the [ClickBench](https://benchmark.clickhouse.com/) benchmark across 43 queries and 10 million rows (1.5 GB), comparing Hotdata to Neon. I know it may not seem like a fair comparison to benchmark a transactional database against a columnar database. However, we've found that developers are increasingly using PostgreSQL as the primary data layer for agents because of its flexibility and ecosystem. While Postgres is great as the primary application database, when the workload shifts toward high-concurrency, low-latency search and analytical queries, a purpose-built engine like Hotdata is a better fit. This benchmark is intended to evaluate that increasingly common deployment pattern rather than compare the databases in their traditional use cases. - **Methodology:** Best of 3 server-side execution times - **Hotdata:** `execution_time_ms` from JSON API response - **Neon:** `EXPLAIN (ANALYZE, TIMING)` Execution Time via direct psql ClickBench on a 10M-row hits table, no indexes on either system. Best of 3 runs. | Q | Query pattern | Hotdata | Neon (PostgreSQL) | Speedup | | --- | --- | --- | --- | --- | | Q01 | COUNT(*) full scan | 40ms | 1.20s | 30.0× | | Q02 | COUNT WHERE filter | 58ms | 1.22s | 21.0× | | Q03 | SUM + COUNT + AVG | 154ms | 1.28s | 8.3× | | Q04 | AVG(UserID) | 555ms | 1.10s | 2.0× | | Q05 | COUNT DISTINCT users | 589ms | 7.26s | 12.3× | | Q06 | COUNT DISTINCT phrases | 394ms | 4.14s | 10.5× | | Q07 | MIN / MAX date | 49ms | 1.19s | 24.2× | | Q08 | GROUP BY adv engine | 60ms | 1.26s | 21.1× | | Q09 | Top regions by users | 615ms | 4.01s | 6.5× | | Q10 | Regions × multi-agg | 128ms | 4.59s | 35.9× | | Q11 | Top phone models | 111ms | 1.11s | 10.0× | | Q12 | Phone + model combos | 114ms | 1.29s | 11.3× | | Q13 | Top search phrases | 536ms | 2.63s | 4.9× | | Q14 | Phrases by distinct users | 669ms | 2.42s | 3.6× | | Q15 | Engine × phrase combos | 495ms | 2.47s | 5.0× | | Q16 | Top users by hit count | 79ms | 3.62s | 45.8× | | Q17 | Users × phrases ordered | 644ms | 3.69s | 5.7× | | Q18 | Users × phrases unordered | 427ms | 1.83s | 4.3× | | Q19 | Per-minute user × phrase | 819ms | 6.69s | 8.2× | | Q20 | Point lookup by UserID | 49ms | 798ms | 16.3× | | Q21 | URL LIKE %google% | 334ms | 1.09s | 3.3× | | Q22 | Google URLs + phrases | 398ms | 1.25s | 3.2× | | Q23 | Title LIKE Google | 776ms | 1.97s | 2.5× | | Q24 | SELECT * google URLs | 416ms | 1.11s | 2.7× | | Q25 | Search phrases by time | 124ms | 1.06s | 8.5× | | Q26 | Phrases alphabetical | 100ms | 1.20s | 12.0× | | Q27 | Phrases × time multi-sort | 136ms | 1.09s | 8.0× | | Q28 | Avg URL length by counter | 309ms | 1.80s | 5.8× | | Q29 | Regex domain extraction | 1.26s | 15.6s | 12.4× | | Q30 | 90-column SUM (wide) | 94ms | 3.31s | 35.2× | | Q31 | Engine × IP filtered agg | 150ms | 7.64s | 50.9× | | Q32 | WatchID × IP filtered agg | 169ms | 8.54s | 50.5× | | Q33 | WatchID × IP full-table agg | 184ms | 27.9s | 151.7× | | Q34 | Top URLs by count | 307ms | 8.32s | 27.1× | | Q35 | URL + literal GROUP BY | 305ms | 8.99s | 29.5× | | Q36 | IP arithmetic GROUP BY | 90ms | 2.68s | 29.8× | | Q37 | CounterID 62 — July views | 109ms | 1.74s | 16.0× | | Q38 | CounterID 62 — titles | 71ms | 1.61s | 22.7× | | Q39 | CounterID 62 — link clicks | 89ms | 1.22s | 13.7× | | Q40 | Traffic source breakdown | 158ms | 1.73s | 11.0× | | Q41 | URL hash × referer filter | 68ms | 1.62s | 23.9× | | Q42 | Window size heatmap | 59ms | 1.63s | 27.6× | | Q43 | Per-minute pageviews | 57ms | 1.32s | 23.1× | Totals: Hotdata 12.4s, Neon 158.3s. Geomean speedup 12.7×.