@@ -278,32 +278,30 @@ AND "date" <= dates_filter_max('2022-03-23T12:35:00+01') -- evaluates to 2023-03
278
278
279
279
` gtfs-via-duckdb ` is fast enough for most use cases I can think of. If there's a particular kind of query that you think should be faster, please [ open an Issue] ( https://github.com/public-transport/gtfs-via-duckdb/issues/new ) !
280
280
281
- todo: re-run them
282
- The following benchmarks were run with the
[ 2025-05-21 VBB GTFS dataset
] ( https://vbb-gtfs.jannisr.de/2025-05-21/ ) (41k
` stops ` , 6m
` stop_times ` , 207m arrivals/departures) using
` [email protected] ` and DuckDB v1.3 on an
[ M2
] ( https://en.wikipedia.org/wiki/Apple_M2 ) laptop running macOS 14.7.6; All measurements are in milliseconds.
281
+ The following benchmarks were run with the
[ 2025-05-21 VBB GTFS dataset
] ( https://vbb-gtfs.jannisr.de/2025-05-21/ ) (41k
` stops ` , 6m
` stop_times ` , 207m arrivals/departures) using
` [email protected] ` and DuckDB v1.3 on an
[ M2
] ( https://en.wikipedia.org/wiki/Apple_M2 ) laptop running macOS 14.7.7; All measurements are in milliseconds.
283
282
284
283
| query | avg | min | p25 | p50 | p75 | p95 | p99 | max | iterations |
285
284
| - | - | - | - | - | - | - | - | - | - |
286
- | <pre >SELECT * <br >FROM stops<br >ORDER BY ST_Distance(stop_loc::geometry, ST_SetSRID(ST_MakePoint(9.7, 50.547), 4326)) ASC<br >LIMIT 100</pre > | 15 | 14.982 | 15 | 15 | 15 | 15 | 15 | 15.488 | 100 |
287
- | <pre >SELECT * <br >FROM arrivals_departures<br >WHERE route_short_name = 'S1'<br >AND t_departure >= '2022-08-09T07:10+02' AND t_departure <= '2022-08-09T07:30+02'<br >AND date >= dates_filter_min('2022-08-09T07:10+02')<br >AND date <= dates_filter_max('2022-08-09T07:30+02')</pre > | 61 | 60.901 | 61 | 61 | 61 | 61 | 62 | 61.778 | 100 |
288
- | <pre >SELECT * <br >FROM arrivals_departures<br >WHERE station_id = 'de:11000:900100001' -- S+U Friedrichstr. (Berlin)<br >AND t_departure >= '2022-08-09T07:10+02' AND t_departure <= '2022-08-09T07:30+02'<br >AND date >= dates_filter_min('2022-08-09T07:10+02')<br >AND date <= dates_filter_max('2022-08-09T07:30+02')</pre > | 33 | 33.129 | 33 | 33 | 33 | 33 | 33 | 33.342 | 40 |
289
- | <pre >SELECT * <br >FROM arrivals_departures<br >WHERE station_id = 'de:11000:900100001' -- S+U Friedrichstr. (Berlin)<br >AND t_departure >= '2022-08-09T07:10+02' AND t_departure <= '2022-08-09T07:30+02'<br >AND date >= dates_filter_min('2022-08-09T07:10+02')<br >AND date <= dates_filter_max('2022-08-09T07:30+02')<br >AND stop_sequence = 0</pre > | 5 | 4.548 | 5 | 5 | 5 | 5 | 5 | 4.598 | 50 |
290
- | <pre >SELECT * <br >FROM arrivals_departures<br >WHERE stop_id = 'de:11000:900100001::4' -- S+U Friedrichstr. (Berlin)<br >AND t_departure >= '2022-08-09T07:10+02' AND t_departure <= '2022-08-09T07:30+02'<br >AND date >= dates_filter_min('2022-08-09T07:10+02')<br >AND date <= dates_filter_max('2022-08-09T07:30+02')</pre > | 8 | 8.038 | 8 | 8 | 8 | 8 | 8 | 8.164 | 100 |
291
- | <pre >SELECT * <br >FROM arrivals_departures<br >WHERE trip_id = '168977951'<br >AND date > '2022-08-08' AND date <= '2022-08-09'</pre > | 2 | 1.878 | 2 | 2 | 2 | 2 | 2 | 1.911 | 100 |
292
- | <pre >SELECT count(* )<br >FROM arrivals_departures<br >WHERE stop_id = 'de:11000:900100001::4' -- S+U Friedrichstr. (Berlin)</pre > | 58 | 57.485 | 58 | 58 | 58 | 58 | 58 | 57.789 | 100 |
293
- | <pre >SELECT count(* )<br >FROM arrivals_departures<br >WHERE stop_id = 'definitely-non-existent'</pre > | 2 | 1.832 | 2 | 2 | 2 | 2 | 2 | 1.876 | 100 |
294
- | <pre >SELECT * <br >FROM arrivals_departures<br >WHERE t_departure >= '2022-08-09T07:10+02' AND t_departure <= '2022-08-09T07:30+02'<br >AND date >= dates_filter_min('2022-08-09T07:10+02'::timestamp with time zone)<br >AND date <= dates_filter_max('2022-08-09T07:30+02'::timestamp with time zone)</pre > | 6310 | 6238.819 | 6241 | 6262 | 6311 | 6503 | 6560 | 6573.768 | 10 |
295
- | <pre >SELECT * <br >FROM arrivals_departures<br >WHERE t_departure >= '2022-08-09T07:10+02' AND t_departure <= '2022-08-09T07:30+02'<br >AND date >= '2022-08-08'<br >AND date <= '2022-08-09'</pre > | 4931 | 4914.388 | 4925 | 4928 | 4937 | 4946 | 4948 | 4948.689 | 10 |
296
- | <pre >SELECT * <br >FROM connections<br >WHERE route_short_name = 'S1'<br >AND t_departure >= '2022-08-09T07:10+02' AND t_departure <= '2022-08-09T07:30+02'<br >AND date >= dates_filter_min('2022-08-09T07:10+02')<br >AND date <= dates_filter_max('2022-08-09T07:30+02')</pre > | 164 | 163.018 | 163 | 164 | 164 | 164 | 165 | 166.568 | 100 |
297
- | <pre >SELECT * <br >FROM connections<br >WHERE from_station_id = 'de:11000:900100001' -- S+U Friedrichstr. (Berlin)<br >AND t_departure >= '2022-08-09T07:10+02' AND t_departure <= '2022-08-09T07:30+02'<br >AND date >= dates_filter_min('2022-08-09T07:10+02')<br >AND date <= dates_filter_max('2022-08-09T07:30+02')</pre > | 59 | 58.137 | 58 | 58 | 59 | 60 | 61 | 61.461 | 40 |
298
- | <pre >SELECT * <br >FROM connections<br >WHERE from_station_id = 'de:11000:900100001' -- S+U Friedrichstr. (Berlin)<br >AND t_departure >= '2022-08-09T07:10+02' AND t_departure <= '2022-08-09T07:30+02'<br >AND date >= dates_filter_min('2022-08-09T07:10+02')<br >AND date <= dates_filter_max('2022-08-09T07:30+02')<br >AND from_stop_sequence = 0</pre > | 7 | 7.439 | 7 | 7 | 7 | 7 | 7 | 7.49 | 50 |
299
- | <pre >SELECT * <br >FROM connections<br >WHERE from_stop_id = 'de:11000:900100001::4' -- S+U Friedrichstr. (Berlin)<br >AND t_departure >= '2022-08-09T07:10+02' AND t_departure <= '2022-08-09T07:30+02'<br >AND date >= dates_filter_min('2022-08-09T07:10+02')<br >AND date <= dates_filter_max('2022-08-09T07:30+02')</pre > | 15 | 14.529 | 15 | 15 | 15 | 15 | 15 | 14.698 | 100 |
300
- | <pre >SELECT * <br >FROM connections<br >WHERE trip_id = '168977951'<br >AND date > '2022-08-08' AND date <= '2022-08-09'</pre > | 3 | 2.86 | 3 | 3 | 3 | 3 | 3 | 2.931 | 100 |
301
- | <pre >SELECT count(* )<br >FROM connections<br >WHERE from_stop_id = 'de:11000:900100001::4' -- S+U Friedrichstr. (Berlin)</pre > | 73 | 72.687 | 73 | 73 | 73 | 73 | 73 | 73.35 | 100 |
302
- | <pre >SELECT count(* )<br >FROM connections<br >WHERE from_stop_id = 'definitely-non-existent'</pre > | 3 | 3.428 | 3 | 3 | 3 | 3 | 4 | 3.525 | 100 |
303
- | <pre >SELECT * <br >FROM connections<br >WHERE t_departure >= '2022-08-09T07:10+02' AND t_departure <= '2022-08-09T07:30+02'<br >AND date >= dates_filter_min('2022-08-09T07:10+02'::timestamp with time zone)<br >AND date <= dates_filter_max('2022-08-09T07:30+02'::timestamp with time zone)<br >ORDER BY t_departure<br >LIMIT 100</pre > | 13127 | 13056.841 | 13086 | 13125 | 13170 | 13194 | 13199 | 13200.027 | 7 |
304
- | <pre >SELECT * <br >FROM connections<br >WHERE t_departure >= '2022-08-09T07:10+02' AND t_departure <= '2022-08-09T07:30+02'<br >AND date >= '2022-08-08'<br >AND date <= '2022-08-09'<br >ORDER BY t_departure<br >LIMIT 100</pre > | 6417 | 6237.932 | 6346 | 6394 | 6512 | 6562 | 6570 | 6571.455 | 7 |
305
- | <pre >SELECT * <br >FROM stats_by_route_date<br >WHERE route_id = '17452_900' -- M4<br >AND date >= '2022-08-08' AND date <= '2022-08-14'<br >AND is_effective = true</pre > | 2862 | 2853.972 | 2860 | 2863 | 2863 | 2867 | 2867 | 2866.798 | 10 |
306
-
285
+ | <pre >SELECT * <br >FROM stops<br >ORDER BY ST_Distance(stop_loc::geometry, ST_Point(9.7, 50.547)) ASC<br >LIMIT 100</pre > | 6.35 | 5.91 | 5.98 | 6.25 | 6.6 | 6.86 | 8.41 | 10.05 | 1576 |
286
+ | <pre >SELECT * <br >FROM arrivals_departures<br >WHERE route_short_name = 'S1'<br >AND t_departure >= '2025-05-27T07:10:00+02' AND t_departure <= '2025-05-27T07:30:00+02'<br >AND date >= dates_filter_min('2025-05-27T07:10:00+02'::timestamp with time zone)<br >AND date <= dates_filter_max('2025-05-27T07:30+02'::timestamp with time zone)</pre > | 305.15 | 260.52 | 303.8 | 307.73 | 312.2 | 320.64 | 326.84 | 328.44 | 33 |
287
+ | <pre >SELECT * <br >FROM arrivals_departures<br >WHERE station_id = 'de:11000:900100001' -- S+U Friedrichstr. (Berlin)<br >AND t_departure >= '2025-05-27T07:10+02' AND t_departure <= '2025-05-27T07:30+02'<br >AND date >= dates_filter_min('2025-05-27T07:10+02')<br >AND date <= dates_filter_max('2025-05-27T07:30+02')</pre > | 129.43 | 119.85 | 126.19 | 128.62 | 131.84 | 138.44 | 140.46 | 142 | 78 |
288
+ | <pre >SELECT * <br >FROM arrivals_departures<br >WHERE station_id = 'de:11000:900100001' -- S+U Friedrichstr. (Berlin)<br >AND t_departure >= '2025-05-27T07:10+02' AND t_departure <= '2025-05-27T07:30+02'<br >AND date >= dates_filter_min('2025-05-27T07:10+02')<br >AND date <= dates_filter_max('2025-05-27T07:30+02')<br >AND stop_sequence = 0</pre > | 81.42 | 65.73 | 79.48 | 82.11 | 84.33 | 87.26 | 89.64 | 102.97 | 123 |
289
+ | <pre >SELECT * <br >FROM arrivals_departures<br >WHERE stop_id = 'de:11000:900100001::4' -- S+U Friedrichstr. (Berlin)<br >AND t_departure >= '2025-05-27T07:10+02' AND t_departure <= '2025-05-27T07:30+02'<br >AND date >= dates_filter_min('2025-05-27T07:10+02')<br >AND date <= dates_filter_max('2025-05-27T07:30+02')</pre > | 83.79 | 64.57 | 82.15 | 84.64 | 85.83 | 91.36 | 95.79 | 97.08 | 120 |
290
+ | <pre >SELECT * <br >FROM arrivals_departures<br >WHERE trip_id = '262623609' -- route_id=10144_109, route_short_name=S2<br >AND date = '2025-05-27'</pre > | 14.25 | 12.38 | 13.42 | 13.98 | 14.84 | 16.12 | 18.98 | 21.77 | 702 |
291
+ | <pre >SELECT count(* )<br >FROM arrivals_departures<br >WHERE stop_id = 'de:11000:900100001::4' -- S+U Friedrichstr. (Berlin)</pre > | 70.9 | 67.54 | 69.09 | 70.1 | 72.47 | 75.73 | 77.24 | 78.83 | 142 |
292
+ | <pre >SELECT count(* )<br >FROM arrivals_departures<br >WHERE stop_id = 'definitely-non-existent'</pre > | 23.61 | 20.31 | 21.97 | 22.67 | 24.84 | 27.51 | 30.78 | 40.43 | 424 |
293
+ | <pre >SELECT * <br >FROM arrivals_departures<br >WHERE t_departure >= '2025-05-27T07:10+02' AND t_departure <= '2025-05-27T07:30+02'<br >AND date >= '2025-05-25'<br >AND date <= '2025-05-27'</pre > | 1269.86 | 1139.03 | 1254.52 | 1272.09 | 1318.94 | 1329.66 | 1331.44 | 1331.89 | 8 |
294
+ | <pre >SELECT * <br >FROM arrivals_departures<br >WHERE t_departure >= '2025-05-27T07:10:00+02' AND t_departure <= '2025-05-27T07:30:00+02'<br >AND "date" >= dates_filter_min('2025-05-27T07:10:00+02'::timestamp with time zone)<br >AND "date" <= dates_filter_max('2025-05-27T07:30:00+02'::timestamp with time zone)</pre > | 34148.21 | 32101.25 | 33459.12 | 34816.99 | 35171.69 | 35455.44 | 35512.2 | 35526.38 | 3 |
295
+ | <pre >SELECT * <br >FROM connections<br >WHERE route_short_name = 'S1'<br >AND t_departure >= '2025-05-27T07:10+02' AND t_departure <= '2025-05-27T07:30+02'<br >AND date >= dates_filter_min('2025-05-27T07:10+02')<br >AND date <= dates_filter_max('2025-05-27T07:30+02')</pre > | 8697.84 | 8629.78 | 8673.26 | 8716.73 | 8731.86 | 8743.96 | 8746.39 | 8746.99 | 3 |
296
+ | <pre >SELECT * <br >FROM connections<br >WHERE from_station_id = 'de:11000:900194006' -- S Schöneweide/Sterndamm (Berlin)<br >AND t_departure >= '2025-05-27T07:10+02' AND t_departure <= '2025-05-27T07:30+02'<br >AND date >= dates_filter_min('2025-05-27T07:10+02')<br >AND date <= dates_filter_max('2025-05-27T07:30+02')</pre > | 1154.01 | 1070.8 | 1115.77 | 1156.47 | 1168.38 | 1243.5 | 1281.37 | 1290.84 | 9 |
297
+ | <pre >SELECT * <br >FROM connections<br >WHERE from_station_id = 'de:11000:900194006' -- S Schöneweide/Sterndamm (Berlin)<br >AND t_departure >= '2025-05-27T07:10+02' AND t_departure <= '2025-05-27T07:30+02'<br >AND date >= dates_filter_min('2025-05-27T07:10+02')<br >AND date <= dates_filter_max('2025-05-27T07:30+02')<br >AND from_stop_sequence_consec = 0</pre > | 482.23 | 454.29 | 466.55 | 467.45 | 475.64 | 555.32 | 571.05 | 574.98 | 21 |
298
+ | <pre >SELECT * <br >FROM connections<br >WHERE from_stop_id = 'de:11000:900100001::4' -- S+U Friedrichstr. (Berlin)<br >AND t_departure >= '2025-05-27T07:10+02' AND t_departure <= '2025-05-27T07:30+02'<br >AND date >= dates_filter_min('2025-05-27T07:10+02')<br >AND date <= dates_filter_max('2025-05-27T07:30+02')</pre > | 885.14 | 835.29 | 869.24 | 875.76 | 909.79 | 922.32 | 923.64 | 923.97 | 12 |
299
+ | <pre >SELECT * <br >FROM connections<br >WHERE trip_id = '262535123' -- route_id=17452_900 (M4)<br >AND date >= '2025-05-26' AND date <= '2025-06-01'</pre > | 19.31 | 15.83 | 18.02 | 18.99 | 20.27 | 22.76 | 24.78 | 27.96 | 519 |
300
+ | <pre >SELECT count(* )<br >FROM connections<br >WHERE from_stop_id = 'de:11000:900100001::4' -- S+U Friedrichstr. (Berlin)</pre > | 341.42 | 263.96 | 340.65 | 346.83 | 350.72 | 355.91 | 358.76 | 359.65 | 30 |
301
+ | <pre >SELECT count(* )<br >FROM connections<br >WHERE from_stop_id = 'definitely-non-existent'</pre > | 343.5 | 314.1 | 319.13 | 345.04 | 354.63 | 362.52 | 463.4 | 503.94 | 30 |
302
+ | <pre >SELECT * <br >FROM connections<br >WHERE t_departure >= '2025-05-27T07:10+02' AND t_departure <= '2025-05-27T07:30+02'<br >AND date >= dates_filter_min('2025-05-27T07:10+02'::timestamp with time zone)<br >AND date <= dates_filter_max('2025-05-27T07:30+02'::timestamp with time zone)<br >ORDER BY t_departure<br >LIMIT 100</pre > | 1013055.35 | 986377.24 | 1026394.41 | 1009900.4 | 1026394.41 | 992028.36 | 1042228.66 | 1042888.42 | 3 |
303
+ | <pre >SELECT * <br >FROM connections<br >WHERE t_departure >= '2025-05-27T07:10+02' AND t_departure <= '2025-05-27T07:30+02'<br >AND date >= '2025-05-25' AND date <= '2025-05-27'<br >ORDER BY t_departure<br >LIMIT 100</pre > | 16347.21 | 16250.36 | 16285.17 | 16319.98 | 16395.63 | 16456.16 | 16468.27 | 16471.29 | 3 |
304
+ | <pre >SELECT * <br >FROM stats_by_route_date<br >WHERE route_id = '17452_900' -- M4<br >AND date >= '2025-05-26' AND date <= '2025-06-01'<br >AND is_effective = true</pre > | 4765.59 | 4704.49 | 4706.87 | 4709.25 | 4796.14 | 4865.64 | 4879.54 | 4883.02 | 3 |
307
305
308
306
## Related Projects
309
307
0 commit comments