我当前正在运行一个 mysql数据库,其中已加载 GTFS数据。 我正在尝试获取特定区域内的所有路线(距中心点5公里)。 这个想法是查询特定区域的站点,然后从站点查询stop_times和trips以获取路线。 我的问题是stop_times表确实很大,我找不到正确的SQL查询来避免慢速查询。
我尝试了普通的内部联接查询,然后尝试了具有不同键的子查询:
SELECT routes.*
FROM routes
WHERE routes.route_id IN
(SELECT DISTINCT trips.route_id FROM trips WHERE trips.trip_id IN
(SELECT DISTINCT stop_times.trip_id FROM stop_times WHERE stop_times.stop_id IN
(SELECT DISTINCT stops.stop_id FROM stops WHERE ST_DISTANCE_SPHERE(POINT(9.191383,45.464210), stops.coordinate) < 5000)))
建议?
答案 0 :(得分:0)
尝试避免IN聚类,而改为使用INNER JOIN
jUnit
并确保您在
上具有索引SELECT routes.*
FROM routes
INNER JOIN (
SELECT DISTINCT trips.route_id
FROM trips
INNER JOIN (
SELECT DISTINCT stop_times.trip_id
FROM stop_times
INNER JOIN (
SELECT DISTINCT stops.stop_id
FROM stops
WHERE ST_DISTANCE_SPHERE(POINT(9.191383,45.464210), stops.coordinate) < 5000
) t1 on t1.stop_id = stop_times.stop_id
) t2 ON t2.trip_id = trips.trip_id
) t3 ON routes.route_id = t3.route_id