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
| Operation | Warm | Cold | Bars |
|---|---|---|---|
| Open and index | 4 ms | 7 ms | |
| Filter, text equals | 5 ms | 9 ms | |
| Filter, regular expression | 6 ms | 8 ms | |
| Filter, numeric range | 6 ms | 8 ms | |
| Filter, invalid numbers | 6 ms | 7 ms | |
| Filter, date range | 5 ms | 6 ms | |
| Filter, invalid dates | 5 ms | 7 ms | |
| Sort, text column | 6 ms | 9 ms | |
| Sort, numeric column | 6 ms | 7 ms | |
| Sort, date column | 6 ms | 6 ms |
10 MB
53,596 rows · 9,999,912 bytes · median of 10 runs each way
| Operation | Warm | Cold | Bars |
|---|---|---|---|
| Open and index | 12 ms | 17 ms | |
| Filter, text equals | 10 ms | 18 ms | |
| Filter, regular expression | 14 ms | 20 ms | |
| Filter, numeric range | 12 ms | 20 ms | |
| Filter, invalid numbers | 13 ms | 19 ms | |
| Filter, date range | 13 ms | 19 ms | |
| Filter, invalid dates | 11 ms | 19 ms | |
| Sort, text column | 15 ms | 19 ms | |
| Sort, numeric column | 12 ms | 18 ms | |
| Sort, date column | 14 ms | 19 ms |
100 MB
532,923 rows · 99,999,911 bytes · median of 10 runs each way
| Operation | Warm | Cold | Bars |
|---|---|---|---|
| Open and index | 11 ms | 11 ms | |
| Filter, text equals | 17 ms | 43 ms | |
| Filter, regular expression | 43 ms | 65 ms | |
| Filter, numeric range | 24 ms | 51 ms | |
| Filter, invalid numbers | 20 ms | 47 ms | |
| Filter, date range | 21 ms | 48 ms | |
| Filter, invalid dates | 20 ms | 47 ms | |
| Sort, text column | 29 ms | 58 ms | |
| Sort, numeric column | 30 ms | 55 ms | |
| Sort, date column | 28 ms | 54 ms |
1 GB
5,300,205 rows · 999,999,957 bytes · median of 10 runs each way
| Operation | Warm | Cold | Bars |
|---|---|---|---|
| Open and index | 69 ms | 322 ms | |
| Filter, text equals | 137 ms | 360 ms | |
| Filter, regular expression | 354 ms | 595 ms | |
| Filter, numeric range | 232 ms | 478 ms | |
| Filter, invalid numbers | 193 ms | 439 ms | |
| Filter, date range | 209 ms | 455 ms | |
| Filter, invalid dates | 197 ms | 446 ms | |
| Sort, text column | 315 ms | 534 ms | |
| Sort, numeric column | 290 ms | 535 ms | |
| Sort, date column | 286 ms | 525 ms |
10 GB
52,720,416 rows · 9,999,999,809 bytes · median of 10 runs each way
| Operation | Warm | Cold | Bars |
|---|---|---|---|
| Open and index | 2.45 s | 3.24 s | |
| Filter, text equals | 3.94 s | 4.43 s | |
| Filter, regular expression | 5.42 s | 6.56 s | |
| Filter, numeric range | 4.42 s | 5.36 s | |
| Filter, invalid numbers | 3.79 s | 4.98 s | |
| Filter, date range | 4.09 s | 5.07 s | |
| Filter, invalid dates | 3.91 s | 4.97 s | |
| Sort, text column | 7.80 s | 8.77 s | |
| Sort, numeric column | 5.22 s | 6.45 s | |
| Sort, date column | 5.38 s | 6.44 s |
10 GB, run to run
Fastest to slowest of ten; the dot is the median
Grouping: exact, or a clear no
csvlite never estimates a group
| Group by | 1 MB | 10 MB | 100 MB | 1 GB | 10 GB |
|---|---|---|---|---|---|
| Region8 | 6 ms8 ms cold | 12 ms19 ms cold | 26 ms53 ms cold | 271 ms509 ms cold | 4.47 s5.53 s cold |
| Region + status56 | 5 ms7 ms cold | 14 ms20 ms cold | 35 ms58 ms cold | 344 ms575 ms cold | 5.11 s6.32 s cold |
| Date3,654 | 10 ms11 ms cold | 17 ms29 ms cold | 73 ms94 ms cold | 576 ms782 ms cold | 6.12 s7.01 s cold |
| Customer e-mailmax 100,005 | 10 ms15 ms cold | 66 ms69 ms cold | refused | refused | refused |
| Quantitymax 1,000,005 | 10 ms10 ms cold | 61 ms63 ms cold | refused | refused | refused |
| Distinct over | 1 MB | 10 MB | 100 MB | 1 GB | 10 GB |
|---|---|---|---|---|---|
| Description22 | 6 ms7 ms cold | 17 ms21 ms cold | 42 ms63 ms cold | 399 ms610 ms cold | 5.57 s6.66 s cold |
| Date3,654 | 8 ms10 ms cold | 22 ms27 ms cold | 129 ms154 ms cold | refused | refused |
| Customer e-mailup to 100,005 | 8 ms9 ms cold | 24 ms29 ms cold | 262 ms294 ms cold | refused | refused |
- 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_DONTNEEDfirst. - 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
| File | Bytes | Rows | SHA-256 |
|---|---|---|---|
| 1 MB | 999,837 | 5,452 | 22a2f228a3393f6bdc0b6ce658fa819fc9a48463a5b9575c0afb7c916b68c8e3 |
| 10 MB | 9,999,912 | 53,596 | 6a7e28ed112b3a79bdab198e2364cfda6cfc138e9335932d933ab29427140a78 |
| 100 MB | 99,999,911 | 532,923 | fb052e3d47fe34b2758808baee6722a0197dbfc18f15f19aeda66e420394fcb2 |
| 1 GB | 999,999,957 | 5,300,205 | 0f8da3f8cec66c9db44dbf7e46502999c837841dcb00178b445084889113e4f8 |
| 10 GB | 9,999,999,809 | 52,720,416 | 4719e88857ccad3379cb17262cf3960f687e876dafdf62b86a5c6868385eacc0 |
Generated with a fixed seed: 15 columns of integers, decimals, dates, text and booleans; 1% invalid values, 2% empty.
Next to other tools: csvlite vs pandas, Polars & DuckDB · All comparisons