Mysql上的gtfs数据库-在区域中搜索路由时查询缓慢

时间:2019-04-26 12:48:19

标签: mysql sql gtfs

我当前正在运行一个 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)))

建议?

1 个答案:

答案 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