csvlite benchmarks · measured 29 September 2026

10 GB opens in 2.45 s.
Every answer in under 10 seconds.

csvlite 1.0.0, one laptop, files from 1 MB to 10 GB. Median of 10 runs, warm and cold cache.

10 GB · open2.45 s3.24 s with a cold cache
10 GB · text filter3.94 s4.43 s with a cold cache
10 GB · date sort5.38 s6.44 s with a cold cache
Runs1,800ten per test, warm and cold

Every operation

1 MB

5,452 rows · 999,837 bytes · median of 10 runs each way

1 MB: median seconds, warm and cold cache
OperationWarmColdBars
Open and index4 ms7 ms
Filter, text equals5 ms9 ms
Filter, regular expression6 ms8 ms
Filter, numeric range6 ms8 ms
Filter, invalid numbers6 ms7 ms
Filter, date range5 ms6 ms
Filter, invalid dates5 ms7 ms
Sort, text column6 ms9 ms
Sort, numeric column6 ms7 ms
Sort, date column6 ms6 ms

10 MB

53,596 rows · 9,999,912 bytes · median of 10 runs each way

10 MB: median seconds, warm and cold cache
OperationWarmColdBars
Open and index12 ms17 ms
Filter, text equals10 ms18 ms
Filter, regular expression14 ms20 ms
Filter, numeric range12 ms20 ms
Filter, invalid numbers13 ms19 ms
Filter, date range13 ms19 ms
Filter, invalid dates11 ms19 ms
Sort, text column15 ms19 ms
Sort, numeric column12 ms18 ms
Sort, date column14 ms19 ms

100 MB

532,923 rows · 99,999,911 bytes · median of 10 runs each way

100 MB: median seconds, warm and cold cache
OperationWarmColdBars
Open and index11 ms11 ms
Filter, text equals17 ms43 ms
Filter, regular expression43 ms65 ms
Filter, numeric range24 ms51 ms
Filter, invalid numbers20 ms47 ms
Filter, date range21 ms48 ms
Filter, invalid dates20 ms47 ms
Sort, text column29 ms58 ms
Sort, numeric column30 ms55 ms
Sort, date column28 ms54 ms

1 GB

5,300,205 rows · 999,999,957 bytes · median of 10 runs each way

1 GB: median seconds, warm and cold cache
OperationWarmColdBars
Open and index69 ms322 ms
Filter, text equals137 ms360 ms
Filter, regular expression354 ms595 ms
Filter, numeric range232 ms478 ms
Filter, invalid numbers193 ms439 ms
Filter, date range209 ms455 ms
Filter, invalid dates197 ms446 ms
Sort, text column315 ms534 ms
Sort, numeric column290 ms535 ms
Sort, date column286 ms525 ms

10 GB

52,720,416 rows · 9,999,999,809 bytes · median of 10 runs each way

10 GB: median seconds, warm and cold cache
OperationWarmColdBars
Open and index2.45 s3.24 s
Filter, text equals3.94 s4.43 s
Filter, regular expression5.42 s6.56 s
Filter, numeric range4.42 s5.36 s
Filter, invalid numbers3.79 s4.98 s
Filter, date range4.09 s5.07 s
Filter, invalid dates3.91 s4.97 s
Sort, text column7.80 s8.77 s
Sort, numeric column5.22 s6.45 s
Sort, date column5.38 s6.44 s

10 GB, run to run

Fastest to slowest of ten; the dot is the median

Fastest, median and slowest of ten runs per operation on the 10 GB file, warm and cold cache0 s2.5 s5 s7.5 s10 sOpen and indexFilter, text equalsFilter, regular expressionFilter, numeric rangeFilter, invalid numbersFilter, date rangeFilter, invalid datesSort, text columnSort, numeric columnSort, date columnGroup, 8 keysGroup, 56 keysGroup, 3,654 keysDistinct, 22 values

Grouping: exact, or a clear no

csvlite never estimates a group

More group keysCount and sum by a column with more and more distinct values. Up to 100,000 key combinations; beyond that, csvlite refuses.
Group by1 MB10 MB100 MB1 GB10 GB
Region86 ms8 ms cold12 ms19 ms cold26 ms53 ms cold271 ms509 ms cold4.47 s5.53 s cold
Region + status565 ms7 ms cold14 ms20 ms cold35 ms58 ms cold344 ms575 ms cold5.11 s6.32 s cold
Date3,65410 ms11 ms cold17 ms29 ms cold73 ms94 ms cold576 ms782 ms cold6.12 s7.01 s cold
Customer e-mailmax 100,00510 ms15 ms cold66 ms69 ms coldrefusedrefusedrefused
Quantitymax 1,000,00510 ms10 ms cold61 ms63 ms coldrefusedrefusedrefused
More distinct values56 groups, counting distinct values of a wider and wider column. The limit is 2,000,000 retained values across worker threads, so where it bites depends on core count (16 threads here).
Distinct over1 MB10 MB100 MB1 GB10 GB
Description226 ms7 ms cold17 ms21 ms cold42 ms63 ms cold399 ms610 ms cold5.57 s6.66 s cold
Date3,6548 ms10 ms cold22 ms27 ms cold129 ms154 ms coldrefusedrefused
Customer e-mailup to 100,0058 ms9 ms cold24 ms29 ms cold262 ms294 ms coldrefusedrefused
Machine
Intel Core i7-11850H, 8 cores / 16 threads · 31.1 GiB RAM · NVMe SSD · Linux. csvlite 1.0.0 release build.
Timing
A fresh process per run: open the file, run the operation, stop when the result is complete in memory. Startup included; drawing excluded.
Cache
Warm: the file is read into the page cache before each run. Cold: it is evicted with POSIX_FADV_DONTNEED first.
Checked
Every filter count matches DuckDB; opens and sorts cover every row; group counts match the generator. 200 of 1,800 runs refused, by design. All 1,800 raw runs
The five test files
FileBytesRowsSHA-256
1 MB999,8375,45222a2f228a3393f6bdc0b6ce658fa819fc9a48463a5b9575c0afb7c916b68c8e3
10 MB9,999,91253,5966a7e28ed112b3a79bdab198e2364cfda6cfc138e9335932d933ab29427140a78
100 MB99,999,911532,923fb052e3d47fe34b2758808baee6722a0197dbfc18f15f19aeda66e420394fcb2
1 GB999,999,9575,300,2050f8da3f8cec66c9db44dbf7e46502999c837841dcb00178b445084889113e4f8
10 GB9,999,999,80952,720,4164719e88857ccad3379cb17262cf3960f687e876dafdf62b86a5c6868385eacc0

Generated with a fixed seed: 15 columns of integers, decimals, dates, text and booleans; 1% invalid values, 2% empty.

Try it on your own CSV

Download csvlite