Over time · 2026-10-08 to 2026-10-12
Every run, every kernel.
neo in white, the engine closest to it at the last run dashed. A hollow point was taken on a busy machine.
How these were taken
Every run the ledgers kept of neo against the others, oldest first: nothing on this tab was measured again for it. A flag is a move of neo's time from one run to the next beyond what a re-run moves by itself (5% at a millisecond and over, 10% under it): green and down is quicker, amber and up is slower, with the day it was recorded. Within the band it is noise and is not flagged. A hollow point was recorded on a busy machine.
Against the field, 1,000,000 rows
load the CSV
10.4 → 2.77 ms
3.8× quicker over 11 runs, 10-08 to 10-11 · Polars 15.2 ms at the last
filter, count
0.021 → 0.018 ms
1.2× quicker over 11 runs, 10-08 to 10-11 · Polars 0.179 ms at the last
filter into a new table
1.40 → 0.380 ms
3.7× quicker over 11 runs, 10-08 to 10-11 · Polars 0.889 ms at the last
sort, as a permutation
1.05 → 1.03 ms
level over 11 runs, 10-08 to 10-11 · Polars 6.68 ms at the last
sort into a new table
3.07 → 2.72 ms
1.1× quicker over 11 runs, 10-08 to 10-11 · Polars 12.2 ms at the last
sum by region
0.051 → 0.020 ms
2.5× quicker over 11 runs, 10-08 to 10-11 · Polars 1.55 ms at the last
Every run as a table
load the CSV · ms
| run | neo | Polars | DuckDB | pandas | Spark |
|---|---|---|---|---|---|
| 2026-10-08 19:52 · busy | 10.4 | 17.2 | 65.1 | 256 | 412 |
| 2026-10-08 20:08 · busy | 8.78 | 15.6 | 57.3 | 241 | 426 |
| 2026-10-10 11:52 · busy | 8.31 | 15.6 | 49.2 | 227 | 389 |
| 2026-10-10 12:00 | 8.89 | 15.5 | 50.0 | 240 | 343 |
| 2026-10-11 10:29 | 4.31 | 16.6 | 54.2 | 255 | 412 |
| 2026-10-11 16:03 | 2.95 | 16.9 | 49.0 | 241 | 383 |
| 2026-10-11 17:08 | 2.89 | 15.6 | 51.3 | 234 | 378 |
| 2026-10-11 17:31 | 2.92 | 15.3 | 51.0 | 237 | 375 |
| 2026-10-11 21:01 | 2.83 | 15.1 | 53.3 | 227 | 356 |
| 2026-10-11 21:13 | 2.93 | 14.8 | 51.6 | 234 | 354 |
| 2026-10-11 21:23 | 2.77 | 15.2 | 51.8 | 229 | 359 |
filter, count · ms
| run | neo | Polars | DuckDB | pandas | Spark |
|---|---|---|---|---|---|
| 2026-10-08 19:52 · busy | 0.021 | 0.198 | 0.626 | 0.337 | 43.7 |
| 2026-10-08 20:08 · busy | 0.014 | 0.208 | 0.622 | 0.333 | 40.9 |
| 2026-10-10 11:52 · busy | 0.014 | 0.219 | 0.568 | 0.327 | 35.3 |
| 2026-10-10 12:00 | 0.014 | 0.191 | 0.572 | 0.333 | 41.4 |
| 2026-10-11 10:29 | 0.014 | 0.201 | 0.644 | 0.331 | 43.1 |
| 2026-10-11 16:03 | 0.014 | 0.177 | 0.566 | 0.315 | 39.1 |
| 2026-10-11 17:08 | 0.014 | 0.171 | 0.553 | 0.328 | 35.0 |
| 2026-10-11 17:31 | 0.014 | 0.178 | 0.582 | 0.345 | 39.1 |
| 2026-10-11 21:01 | 0.017 | 0.187 | 0.534 | 0.328 | 37.6 |
| 2026-10-11 21:13 | 0.017 | 0.178 | 0.554 | 0.324 | 34.5 |
| 2026-10-11 21:23 | 0.018 | 0.179 | 0.602 | 0.328 | 36.9 |
filter into a new table · ms
| run | neo | Polars | DuckDB | pandas | Spark |
|---|---|---|---|---|---|
| 2026-10-08 19:52 · busy | 1.40 | 1.08 | 43.8 | 12.7 | 24.3 |
| 2026-10-08 20:08 · busy | 0.415 | 1.06 | 41.6 | 12.5 | 24.9 |
| 2026-10-10 11:52 · busy | 0.319 | 0.938 | 40.1 | 12.0 | 22.1 |
| 2026-10-10 12:00 | 0.295 | 1.09 | 40.2 | 11.9 | 24.1 |
| 2026-10-11 10:29 | 0.490 | 1.14 | 43.3 | 12.9 | 24.5 |
| 2026-10-11 16:03 | 0.383 | 1.06 | 40.2 | 11.9 | 25.6 |
| 2026-10-11 17:08 | 0.333 | 1.09 | 40.4 | 11.9 | 23.3 |
| 2026-10-11 17:31 | 0.316 | 1.06 | 42.2 | 12.1 | 22.5 |
| 2026-10-11 21:01 | 0.364 | 0.908 | 40.2 | 11.7 | 24.2 |
| 2026-10-11 21:13 | 0.319 | 0.999 | 39.8 | 11.7 | 20.7 |
| 2026-10-11 21:23 | 0.380 | 0.889 | 40.3 | 11.8 | 22.0 |
sort, as a permutation · ms
| run | neo | Polars | DuckDB | pandas | Spark |
|---|---|---|---|---|---|
| 2026-10-08 19:52 · busy | 1.05 | 7.34 | — | 71.7 | — |
| 2026-10-08 20:08 · busy | 1.07 | 7.27 | — | 69.8 | — |
| 2026-10-10 11:52 · busy | 1.05 | 6.35 | — | 65.2 | — |
| 2026-10-10 12:00 | 1.06 | 6.62 | — | 65.2 | — |
| 2026-10-11 10:29 | 1.06 | 7.23 | — | 71.3 | — |
| 2026-10-11 16:03 | 1.03 | 7.11 | — | 65.6 | — |
| 2026-10-11 17:08 | 1.02 | 6.80 | — | 66.6 | — |
| 2026-10-11 17:31 | 1.03 | 7.18 | — | 66.4 | — |
| 2026-10-11 21:01 | 1.04 | 6.58 | — | 64.1 | — |
| 2026-10-11 21:13 | 1.06 | 6.83 | — | 64.7 | — |
| 2026-10-11 21:23 | 1.03 | 6.68 | — | 64.8 | — |
sort into a new table · ms
| run | neo | Polars | DuckDB | pandas | Spark |
|---|---|---|---|---|---|
| 2026-10-08 19:52 · busy | 3.07 | 13.7 | 27.6 | 142 | 135 |
| 2026-10-08 20:08 · busy | 2.98 | 12.4 | 25.0 | 126 | 124 |
| 2026-10-10 11:52 · busy | 2.77 | 10.7 | 23.2 | 113 | 123 |
| 2026-10-10 12:00 | 2.72 | 11.8 | 24.8 | 115 | 119 |
| 2026-10-11 10:29 | 2.91 | 13.7 | 27.6 | 129 | 134 |
| 2026-10-11 16:03 | 2.75 | 12.5 | 24.2 | 119 | 117 |
| 2026-10-11 17:08 | 2.74 | 11.7 | 24.8 | 112 | 112 |
| 2026-10-11 17:31 | 2.75 | 12.1 | 25.5 | 114 | 116 |
| 2026-10-11 21:01 | 2.69 | 11.8 | 23.2 | 111 | 116 |
| 2026-10-11 21:13 | 2.76 | 12.2 | 23.9 | 109 | 121 |
| 2026-10-11 21:23 | 2.72 | 12.2 | 23.4 | 110 | 122 |
sum by region · ms
| run | neo | Polars | DuckDB | pandas | Spark |
|---|---|---|---|---|---|
| 2026-10-08 19:52 · busy | 0.051 | 2.04 | 2.75 | 13.2 | 53.6 |
| 2026-10-08 20:08 · busy | 0.035 | 1.55 | 2.52 | 12.6 | 46.5 |
| 2026-10-10 11:52 · busy | 0.032 | 1.49 | 2.28 | 12.4 | 45.0 |
| 2026-10-10 12:00 | 0.032 | 1.61 | 2.31 | 12.4 | 42.1 |
| 2026-10-11 10:29 | 0.035 | 1.61 | 2.40 | 13.5 | 45.2 |
| 2026-10-11 16:03 | 0.024 | 1.60 | 2.28 | 12.3 | 43.0 |
| 2026-10-11 17:08 | 0.019 | 1.41 | 2.29 | 12.8 | 40.2 |
| 2026-10-11 17:31 | 0.019 | 1.57 | 2.30 | 12.4 | 42.1 |
| 2026-10-11 21:01 | 0.020 | 1.70 | 2.30 | 12.2 | 40.4 |
| 2026-10-11 21:13 | 0.020 | 1.52 | 2.27 | 12.0 | 40.9 |
| 2026-10-11 21:23 | 0.020 | 1.55 | 2.24 | 12.2 | 39.0 |
Against the field, 10,000,000 rows
load the CSV
78.8 → 21.7 ms
3.6× quicker over 11 runs, 10-08 to 10-11 · Polars 114 ms at the last
filter, count
0.341 → 0.317 ms
1.1× quicker over 11 runs, 10-08 to 10-11 · Polars 0.621 ms at the last
filter into a new table
4.04 → 3.40 ms
1.2× quicker over 11 runs, 10-08 to 10-11 · Polars 9.13 ms at the last
sort, as a permutation
12.9 → 9.39 ms
1.4× quicker over 11 runs, 10-08 to 10-11 · Polars 71.4 ms at the last
sort into a new table
68.3 → 62.6 ms
1.1× quicker over 11 runs, 10-08 to 10-11 · Polars 139 ms at the last
sum by region
0.490 → 0.401 ms
1.2× quicker over 11 runs, 10-08 to 10-11 · Polars 6.03 ms at the last
Every run as a table
load the CSV · ms
| run | neo | Polars | DuckDB | pandas | Spark |
|---|---|---|---|---|---|
| 2026-10-08 19:53 · busy | 78.8 | 348 | 1,490 | 2,675 | 2,651 |
| 2026-10-08 20:09 · busy | 90.7 | 130 | 392 | 2,522 | 2,970 |
| 2026-10-10 11:52 · busy | 85.8 | 120 | 195 | 2,365 | 1,327 |
| 2026-10-10 12:01 | 81.8 | 119 | 204 | 2,420 | 1,504 |
| 2026-10-11 10:30 | 34.8 | 129 | 215 | 2,566 | 1,420 |
| 2026-10-11 16:04 | 23.6 | 128 | 209 | 2,376 | 1,515 |
| 2026-10-11 17:09 | 23.9 | 132 | 220 | 2,422 | 1,387 |
| 2026-10-11 17:31 | 24.1 | 130 | 199 | 2,465 | 1,541 |
| 2026-10-11 21:02 | 21.9 | 117 | 200 | 2,428 | 1,372 |
| 2026-10-11 21:14 | 22.3 | 114 | 214 | 2,335 | 1,472 |
| 2026-10-11 21:24 | 21.7 | 114 | 213 | 2,343 | 1,450 |
filter, count · ms
| run | neo | Polars | DuckDB | pandas | Spark |
|---|---|---|---|---|---|
| 2026-10-08 19:53 · busy | 0.341 | 1.29 | 3.83 | 3.89 | 79.5 |
| 2026-10-08 20:09 · busy | 0.324 | 0.678 | 4.12 | 3.72 | 68.8 |
| 2026-10-10 11:52 · busy | 0.305 | 0.616 | 2.19 | 3.08 | 42.5 |
| 2026-10-10 12:01 | 0.315 | 0.631 | 2.20 | 3.08 | 42.3 |
| 2026-10-11 10:30 | 0.322 | 0.621 | 2.32 | 3.18 | 47.1 |
| 2026-10-11 16:04 | 0.317 | 0.617 | 2.19 | 3.10 | 46.6 |
| 2026-10-11 17:09 | 0.322 | 0.626 | 2.21 | 3.08 | 40.6 |
| 2026-10-11 17:31 | 0.315 | 0.619 | 2.20 | 3.15 | 45.1 |
| 2026-10-11 21:02 | 0.313 | 0.596 | 2.09 | 3.06 | 42.5 |
| 2026-10-11 21:14 | 0.312 | 0.636 | 2.19 | 3.06 | 41.4 |
| 2026-10-11 21:24 | 0.317 | 0.621 | 2.13 | 3.12 | 39.3 |
filter into a new table · ms
| run | neo | Polars | DuckDB | pandas | Spark |
|---|---|---|---|---|---|
| 2026-10-08 19:53 · busy | 4.04 | 17.4 | 948 | 155 | 114 |
| 2026-10-08 20:09 · busy | 3.39 | 8.57 | 485 | 154 | 102 |
| 2026-10-10 11:52 · busy | 3.42 | 8.91 | 246 | 140 | 69.1 |
| 2026-10-10 12:01 | 3.43 | 7.63 | 264 | 136 | 65.8 |
| 2026-10-11 10:30 | 3.55 | 7.66 | 299 | 152 | 78.9 |
| 2026-10-11 16:04 | 3.50 | 7.92 | 293 | 140 | 69.2 |
| 2026-10-11 17:09 | 3.43 | 8.73 | 274 | 139 | 75.9 |
| 2026-10-11 17:31 | 3.42 | 6.85 | 276 | 141 | 64.4 |
| 2026-10-11 21:02 | 3.66 | 7.39 | 216 | 142 | 61.6 |
| 2026-10-11 21:14 | 3.45 | 7.21 | 234 | 141 | 63.0 |
| 2026-10-11 21:24 | 3.40 | 9.13 | 328 | 139 | 65.1 |
sort, as a permutation · ms
| run | neo | Polars | DuckDB | pandas | Spark |
|---|---|---|---|---|---|
| 2026-10-08 19:53 · busy | 12.9 | 153 | — | 945 | — |
| 2026-10-08 20:09 · busy | 9.69 | 99.4 | — | 870 | — |
| 2026-10-10 11:52 · busy | 9.19 | 69.1 | — | 809 | — |
| 2026-10-10 12:01 | 9.39 | 70.3 | — | 804 | — |
| 2026-10-11 10:30 | 9.88 | 75.6 | — | 873 | — |
| 2026-10-11 16:04 | 9.66 | 73.2 | — | 808 | — |
| 2026-10-11 17:09 | 9.35 | 69.7 | — | 813 | — |
| 2026-10-11 17:31 | 9.43 | 69.8 | — | 837 | — |
| 2026-10-11 21:02 | 9.19 | 72.7 | — | 794 | — |
| 2026-10-11 21:14 | 9.31 | 71.6 | — | 787 | — |
| 2026-10-11 21:24 | 9.39 | 71.4 | — | 798 | — |
sort into a new table · ms
| run | neo | Polars | DuckDB | pandas | Spark |
|---|---|---|---|---|---|
| 2026-10-08 19:53 · busy | 68.3 | 812 | 1,015 | 2,809 | 765 |
| 2026-10-08 20:09 · busy | 64.0 | 174 | 208 | 2,028 | 896 |
| 2026-10-10 11:52 · busy | 63.0 | 132 | 171 | 1,928 | 469 |
| 2026-10-10 12:01 | 63.1 | 122 | 190 | 1,961 | 475 |
| 2026-10-11 10:30 | 65.6 | 137 | 217 | 2,176 | 522 |
| 2026-10-11 16:04 | 64.2 | 132 | 188 | 2,056 | 451 |
| 2026-10-11 17:09 | 63.4 | 125 | 176 | 1,960 | 504 |
| 2026-10-11 17:31 | 63.2 | 125 | 188 | 2,040 | 484 |
| 2026-10-11 21:02 | 62.4 | 137 | 189 | 1,912 | 459 |
| 2026-10-11 21:14 | 62.3 | 145 | 179 | 1,900 | 467 |
| 2026-10-11 21:24 | 62.6 | 139 | 188 | 1,913 | 469 |
sum by region · ms
| run | neo | Polars | DuckDB | pandas | Spark |
|---|---|---|---|---|---|
| 2026-10-08 19:53 · busy | 0.490 | 106 | 30.4 | 179 | 128 |
| 2026-10-08 20:09 · busy | 0.481 | 10.7 | 13.7 | 157 | 112 |
| 2026-10-10 11:52 · busy | 0.474 | 6.69 | 9.18 | 137 | 69.7 |
| 2026-10-10 12:01 | 0.482 | 6.83 | 9.24 | 140 | 70.1 |
| 2026-10-11 10:30 | 0.501 | 6.34 | 9.43 | 152 | 82.1 |
| 2026-10-11 16:04 | 0.476 | 6.04 | 8.95 | 139 | 64.7 |
| 2026-10-11 17:09 | 0.468 | 6.26 | 9.04 | 139 | 72.7 |
| 2026-10-11 17:31 | 0.475 | 6.02 | 9.17 | 140 | 76.2 |
| 2026-10-11 21:02 | 0.465 | 5.95 | 9.11 | 141 | 63.6 |
| 2026-10-11 21:14 | 0.466 | 5.60 | 8.94 | 138 | 62.3 |
| 2026-10-11 21:24 | 0.401 | 6.03 | 8.96 | 142 | 66.1 |
Against the field, 100,000,000 rows
load the CSV
1,465 → 249 ms
5.9× quicker over 10 runs, 10-08 to 10-11 · Polars 1,186 ms at the last
filter, count
3.52 → 2.98 ms
1.2× quicker over 10 runs, 10-08 to 10-11 · Polars 4.45 ms at the last
filter into a new table
48.1 → 34.3 ms
1.4× quicker over 10 runs, 10-08 to 10-11 · Polars 111 ms at the last
sort, as a permutation
150 → 99.6 ms
1.5× quicker over 10 runs, 10-08 to 10-11 · Polars 1,031 ms at the last
sort into a new table
1,483 → 744 ms
2.0× quicker over 10 runs, 10-08 to 10-11 · Polars 1,542 ms at the last
sum by region
5.41 → 4.11 ms
1.3× quicker over 10 runs, 10-08 to 10-11 · Polars 52.8 ms at the last
Every run as a table
load the CSV · ms
| run | neo | Polars | DuckDB | pandas | Spark |
|---|---|---|---|---|---|
| 2026-10-08 20:16 · busy | 1,465 | 1,715 | 3,976 | 33,844 | 29,040 |
| 2026-10-10 11:58 · busy | 909 | 1,203 | 2,315 | 26,501 | 16,694 |
| 2026-10-10 12:08 | 861 | 1,227 | 2,452 | 27,357 | 13,784 |
| 2026-10-11 10:38 | 409 | 1,340 | 2,638 | 28,527 | 14,573 |
| 2026-10-11 16:09 | 299 | 1,210 | 2,288 | 28,081 | 14,524 |
| 2026-10-11 17:15 | 285 | 1,203 | 2,375 | 26,600 | 14,249 |
| 2026-10-11 17:38 | 279 | 1,206 | 2,356 | 26,817 | 16,094 |
| 2026-10-11 21:07 | 244 | 1,165 | 2,374 | 26,868 | 15,837 |
| 2026-10-11 21:20 | 244 | 1,132 | 2,386 | 26,444 | 15,666 |
| 2026-10-11 21:29 | 249 | 1,186 | 2,388 | 27,009 | 15,900 |
filter, count · ms
| run | neo | Polars | DuckDB | pandas | Spark |
|---|---|---|---|---|---|
| 2026-10-08 20:16 · busy | 3.52 | 4.67 | 21.7 | 39.1 | 167 |
| 2026-10-10 11:58 · busy | 3.01 | 3.95 | 18.7 | 30.6 | 137 |
| 2026-10-10 12:08 | 2.89 | 4.31 | 19.1 | 30.6 | 134 |
| 2026-10-11 10:38 | 3.09 | 4.48 | 19.7 | 31.4 | 136 |
| 2026-10-11 16:09 | 3.13 | 4.43 | 18.9 | 30.4 | 124 |
| 2026-10-11 17:15 | 2.91 | 4.15 | 18.9 | 30.6 | 132 |
| 2026-10-11 17:38 | 2.91 | 4.27 | 18.4 | 30.4 | 132 |
| 2026-10-11 21:07 | 2.92 | 4.12 | 18.2 | 30.4 | 129 |
| 2026-10-11 21:20 | 3.00 | 4.34 | 18.1 | 30.4 | 130 |
| 2026-10-11 21:29 | 2.98 | 4.45 | 18.4 | 30.4 | 131 |
filter into a new table · ms
| run | neo | Polars | DuckDB | pandas | Spark |
|---|---|---|---|---|---|
| 2026-10-08 20:16 · busy | 48.1 | 151 | 2,438 | 1,578 | 1,361 |
| 2026-10-10 11:58 · busy | 35.4 | 136 | 1,680 | 1,504 | 691 |
| 2026-10-10 12:08 | 34.3 | 125 | 1,677 | 1,475 | 716 |
| 2026-10-11 10:38 | 36.5 | 137 | 2,192 | 1,615 | 719 |
| 2026-10-11 16:09 | 35.6 | 100.0 | 1,533 | 1,531 | 626 |
| 2026-10-11 17:15 | 34.7 | 125 | 1,831 | 1,549 | 711 |
| 2026-10-11 17:38 | 34.4 | 116 | 1,624 | 1,431 | 708 |
| 2026-10-11 21:07 | 34.2 | 119 | 1,670 | 1,459 | 696 |
| 2026-10-11 21:20 | 33.9 | 113 | 1,721 | 1,474 | 687 |
| 2026-10-11 21:29 | 34.3 | 111 | 1,753 | 1,541 | 693 |
sort, as a permutation · ms
| run | neo | Polars | DuckDB | pandas | Spark |
|---|---|---|---|---|---|
| 2026-10-08 20:16 · busy | 150 | 1,560 | — | 10,093 | — |
| 2026-10-10 11:58 · busy | 98.9 | 1,000 | — | 9,706 | — |
| 2026-10-10 12:08 | 100 | 1,107 | — | 10,051 | — |
| 2026-10-11 10:38 | 104 | 1,144 | — | 10,835 | — |
| 2026-10-11 16:09 | 102 | 1,055 | — | 9,821 | — |
| 2026-10-11 17:15 | 101 | 1,055 | — | 9,929 | — |
| 2026-10-11 17:38 | 99.9 | 1,083 | — | 9,866 | — |
| 2026-10-11 21:07 | 99.1 | 983 | — | 9,615 | — |
| 2026-10-11 21:20 | 99.4 | 970 | — | 9,735 | — |
| 2026-10-11 21:29 | 99.6 | 1,031 | — | 9,765 | — |
sort into a new table · ms
| run | neo | Polars | DuckDB | pandas | Spark |
|---|---|---|---|---|---|
| 2026-10-08 20:16 · busy | 1,483 | 2,490 | 4,453 | 24,679 | 8,585 |
| 2026-10-10 11:58 · busy | 752 | 1,716 | 3,059 | 23,394 | 5,289 |
| 2026-10-10 12:08 | 750 | 1,677 | 2,889 | 23,562 | 5,211 |
| 2026-10-11 10:38 | 771 | 1,833 | 3,595 | 25,418 | 5,392 |
| 2026-10-11 16:09 | 759 | 1,693 | 2,929 | 23,451 | 4,653 |
| 2026-10-11 17:15 | 750 | 1,658 | 2,930 | 23,554 | 5,383 |
| 2026-10-11 17:38 | 747 | 1,614 | 2,647 | 23,179 | 5,173 |
| 2026-10-11 21:07 | 745 | 1,547 | 2,702 | 22,706 | 4,830 |
| 2026-10-11 21:20 | 744 | 1,522 | 2,929 | 23,092 | 4,834 |
| 2026-10-11 21:29 | 744 | 1,542 | 2,875 | 23,277 | 4,970 |
sum by region · ms
| run | neo | Polars | DuckDB | pandas | Spark |
|---|---|---|---|---|---|
| 2026-10-08 20:16 · busy | 5.41 | 85.8 | 99.8 | 1,452 | 803 |
| 2026-10-10 11:58 · busy | 5.06 | 55.7 | 81.3 | 1,401 | 477 |
| 2026-10-10 12:08 | 5.08 | 53.7 | 82.8 | 1,415 | 454 |
| 2026-10-11 10:38 | 4.94 | 56.8 | 85.4 | 1,530 | 473 |
| 2026-10-11 16:09 | 4.24 | 51.3 | 80.7 | 1,419 | 401 |
| 2026-10-11 17:15 | 4.21 | 53.4 | 82.3 | 1,444 | 466 |
| 2026-10-11 17:38 | 4.07 | 52.5 | 83.5 | 1,403 | 453 |
| 2026-10-11 21:07 | 4.08 | 52.1 | 81.1 | 1,396 | 414 |
| 2026-10-11 21:20 | 4.10 | 52.7 | 82.1 | 1,399 | 415 |
| 2026-10-11 21:29 | 4.11 | 52.8 | 84.4 | 1,398 | 432 |
Against the ports: Go, Rust, Swift, Zig
The four ports were timed together on one day (2026-10-12); only the cold load was run twice, so it is the one kernel of theirs with a line. Measured once and so not drawn: load, filter, count, sort, as a permutation, sort into a new table, sum by region — the Evals tab has those. The load in process is neo's against the Rust port's, the one port bench_load_profile.sh runs, which it has done since 2026-10-10.
load, the parse loop in process, 1M rows
5.82 → 2.79 ms
2.1× quicker over 6 runs, 10-10 to 10-11 · Rust 3.11 ms at the last
cold load, a fresh process, 1M rows
8.96 → 5.96 ms
1.5× quicker over 2 runs, 10-12 to 10-12 · Zig 4.32 ms at the last
load, the parse loop in process, 10M rows
44.5 → 21.1 ms
2.1× quicker over 6 runs, 10-10 to 10-11 · Rust 32.6 ms at the last
cold load, a fresh process, 10M rows
45.0 → 43.3 ms
level over 2 runs, 10-12 to 10-12 · Zig 38.8 ms at the last
load, the parse loop in process, 100M rows
632 → 500 ms
1.3× quicker over 2 runs, 10-10 to 10-10 · Rust 298 ms at the last
cold load, a fresh process, 100M rows
420 → 426 ms
level over 2 runs, 10-12 to 10-12 · Zig 454 ms at the last
Every run as a table
load, the parse loop in process, 1M rows · ms
| run | neo | Go | Rust | Swift | Zig |
|---|---|---|---|---|---|
| 2026-10-10 16:21 · busy | 5.82 | — | 3.06 | — | — |
| 2026-10-10 17:35 | 5.09 | — | 2.98 | — | — |
| 2026-10-10 18:11 · busy | 5.45 | — | 2.95 | — | — |
| 2026-10-10 21:53 | 4.87 | — | 3.22 | — | — |
| 2026-10-11 08:14 · busy | 3.58 | — | 3.09 | — | — |
| 2026-10-11 14:11 | 2.79 | — | 3.11 | — | — |
cold load, a fresh process, 1M rows · ms
| run | neo | Go | Rust | Swift | Zig |
|---|---|---|---|---|---|
| 2026-10-12 06:38 | 8.96 | 10.4 | 7.29 | 6.69 | 4.45 |
| 2026-10-12 07:17 | 5.96 | 9.97 | 6.26 | 6.54 | 4.32 |
load, the parse loop in process, 10M rows · ms
| run | neo | Go | Rust | Swift | Zig |
|---|---|---|---|---|---|
| 2026-10-10 16:21 · busy | 44.5 | — | 34.4 | — | — |
| 2026-10-10 17:35 · busy | 41.6 | — | 38.0 | — | — |
| 2026-10-10 18:11 · busy | 44.1 | — | 35.6 | — | — |
| 2026-10-10 21:53 | 36.6 | — | 36.3 | — | — |
| 2026-10-11 08:14 · busy | 28.9 | — | 34.5 | — | — |
| 2026-10-11 14:11 · busy | 21.1 | — | 32.6 | — | — |
cold load, a fresh process, 10M rows · ms
| run | neo | Go | Rust | Swift | Zig |
|---|---|---|---|---|---|
| 2026-10-12 06:44 | 45.0 | 79.9 | 58.3 | 59.7 | 39.8 |
| 2026-10-12 07:18 | 43.3 | 77.3 | 56.5 | 55.4 | 38.8 |
load, the parse loop in process, 100M rows · ms
| run | neo | Go | Rust | Swift | Zig |
|---|---|---|---|---|---|
| 2026-10-10 16:21 · busy | 632 | — | 367 | — | — |
| 2026-10-10 21:54 · busy | 500 | — | 298 | — | — |
cold load, a fresh process, 100M rows · ms
| run | neo | Go | Rust | Swift | Zig |
|---|---|---|---|---|---|
| 2026-10-12 07:12 | 420 | 726 | 504 | 482 | 448 |
| 2026-10-12 07:19 | 426 | 734 | 542 | 496 | 454 |
On public data, read as text
worldcitiespop, first load
29.2 → 23.8 ms
1.2× quicker over 4 runs, 10-11 to 10-11 · Arrow 26.3 ms at the last
worldcitiespop, loads after it
19.3 → 11.4 ms
1.7× quicker over 4 runs, 10-11 to 10-11 · Arrow 23.0 ms at the last
NYC taxi · 1M, first load
85.3 → 72.9 ms
1.2× quicker over 5 runs, 10-11 to 10-11 · Arrow 96.1 ms at the last
NYC taxi · 1M, loads after it
71.6 → 52.9 ms
1.4× quicker over 5 runs, 10-11 to 10-11 · Arrow 90.7 ms at the last
NYC taxi · 10M, first load
747 → 448 ms
1.7× quicker over 3 runs, 10-11 to 10-11 · Arrow 954 ms at the last
NYC taxi · 10M, loads after it
710 → 418 ms
1.7× quicker over 3 runs, 10-11 to 10-11 · Arrow 959 ms at the last
ClickBench · 1M, first load
185 → 126 ms
1.5× quicker over 6 runs, 10-11 to 10-11 · Polars 274 ms at the last
ClickBench · 1M, loads after it
164 → 96.0 ms
1.7× quicker over 6 runs, 10-11 to 10-11 · Polars 189 ms at the last
ClickBench · 10M, first load
2,070 → 1,053 ms
2.0× quicker over 3 runs, 10-11 to 10-11 · Polars 2,814 ms at the last
ClickBench · 10M, loads after it
2,045 → 1,056 ms
1.9× quicker over 3 runs, 10-11 to 10-11 · Polars 2,696 ms at the last
Every run as a table
worldcitiespop, first load · ms
| run | neo | Arrow | Polars | DuckDB | pandas |
|---|---|---|---|---|---|
| 2026-10-11 09:02 | 29.2 | 29.8 | 51.4 | 278 | 1,722 |
| 2026-10-11 09:09 · busy | 29.8 | 29.8 | 52.7 | 280 | 1,739 |
| 2026-10-11 09:46 | 25.6 | 29.6 | 49.2 | 280 | 1,125 |
| 2026-10-11 16:12 | 23.8 | 26.3 | 47.5 | 252 | 1,072 |
worldcitiespop, loads after it · ms
| run | neo | Arrow | Polars | DuckDB | pandas |
|---|---|---|---|---|---|
| 2026-10-11 09:02 | 19.3 | 26.6 | 42.8 | 102 | 1,724 |
| 2026-10-11 09:09 · busy | 19.5 | 26.5 | 43.4 | 99.2 | 1,749 |
| 2026-10-11 09:46 | 12.6 | 26.8 | 44.0 | 102 | 1,108 |
| 2026-10-11 16:12 | 11.4 | 23.0 | 39.9 | 91.8 | 1,053 |
NYC taxi · 1M, first load · ms
| run | neo | Arrow | Polars | DuckDB | pandas |
|---|---|---|---|---|---|
| 2026-10-11 09:04 | 85.3 | 103 | 144 | 937 | 3,665 |
| 2026-10-11 09:11 | 89.5 | 104 | 146 | 908 | 3,699 |
| 2026-10-11 09:26 | 89.6 | 104 | 146 | 908 | 3,696 |
| 2026-10-11 09:50 | 78.1 | 104 | 146 | 908 | 3,305 |
| 2026-10-11 16:15 | 72.9 | 96.1 | 142 | 827 | 3,151 |
NYC taxi · 1M, loads after it · ms
| run | neo | Arrow | Polars | DuckDB | pandas |
|---|---|---|---|---|---|
| 2026-10-11 09:04 | 71.6 | 99.0 | 105 | 725 | 3,679 |
| 2026-10-11 09:11 | 73.0 | 98.4 | 103 | 716 | 3,707 |
| 2026-10-11 09:26 | 74.0 | 98.0 | 109 | 730 | 3,658 |
| 2026-10-11 09:50 | 57.2 | 98.3 | 107 | 740 | 3,201 |
| 2026-10-11 16:15 | 52.9 | 90.7 | 95.3 | 661 | 3,103 |
NYC taxi · 10M, first load · ms
| run | neo | Arrow | Polars | DuckDB | pandas |
|---|---|---|---|---|---|
| 2026-10-11 09:16 · busy | 747 | 1,011 | 1,302 | 2,949 | — |
| 2026-10-11 10:07 | 490 | 1,021 | 1,331 | 3,042 | 32,853 |
| 2026-10-11 16:34 | 448 | 954 | 1,245 | 2,752 | 31,837 |
NYC taxi · 10M, loads after it · ms
| run | neo | Arrow | Polars | DuckDB | pandas |
|---|---|---|---|---|---|
| 2026-10-11 09:16 · busy | 710 | 1,011 | 1,267 | 2,648 | — |
| 2026-10-11 10:07 | 465 | 1,018 | 1,268 | 2,879 | 32,863 |
| 2026-10-11 16:34 | 418 | 959 | 1,098 | 2,539 | 31,512 |
ClickBench · 1M, first load · ms
| run | neo | Arrow | Polars | DuckDB | pandas |
|---|---|---|---|---|---|
| 2026-10-11 09:06 · busy | 185 | — | 291 | 1,758 | 6,574 |
| 2026-10-11 09:13 · busy | 192 | 403 | 295 | 1,742 | 6,431 |
| 2026-10-11 09:30 | 206 | 413 | 301 | 1,835 | 6,517 |
| 2026-10-11 09:52 | 141 | 406 | 294 | 1,765 | — |
| 2026-10-11 10:27 | 145 | 402 | 299 | 1,780 | 6,527 |
| 2026-10-11 16:21 | 126 | 373 | 274 | 1,647 | 5,944 |
ClickBench · 1M, loads after it · ms
| run | neo | Arrow | Polars | DuckDB | pandas |
|---|---|---|---|---|---|
| 2026-10-11 09:06 · busy | 164 | — | 206 | 1,518 | 6,505 |
| 2026-10-11 09:13 · busy | 166 | 405 | 203 | 1,515 | 6,421 |
| 2026-10-11 09:30 | 182 | 419 | 219 | 1,541 | 6,497 |
| 2026-10-11 09:52 | 113 | 407 | 208 | 1,523 | — |
| 2026-10-11 10:27 | 115 | 406 | 216 | 1,528 | 6,498 |
| 2026-10-11 16:21 | 96.0 | 373 | 189 | 1,438 | 5,876 |
ClickBench · 10M, first load · ms
| run | neo | Arrow | Polars | DuckDB | pandas |
|---|---|---|---|---|---|
| 2026-10-11 09:22 · busy | 2,070 | 4,049 | 3,017 | 4,887 | — |
| 2026-10-11 10:19 | 1,572 | 4,147 | 3,042 | 5,589 | — |
| 2026-10-11 16:43 | 1,053 | 3,752 | 2,814 | 4,626 | — |
ClickBench · 10M, loads after it · ms
| run | neo | Arrow | Polars | DuckDB | pandas |
|---|---|---|---|---|---|
| 2026-10-11 09:22 · busy | 2,045 | 4,099 | 2,972 | 5,153 | — |
| 2026-10-11 10:19 | 1,673 | 4,159 | 2,980 | 5,640 | — |
| 2026-10-11 16:43 | 1,056 | 3,829 | 2,696 | 4,682 | — |
Measured on Apple M5 Max, 18 cores, 26.4.1. Every point is a run a benchmark script appended to the engine's ledgers; nothing on this page was measured again for it.