База данных Gtfs на Mysql - медленный запрос при поиске маршрутов в области - PullRequest
0 голосов
/ 26 апреля 2019

Я сейчас использую базу данных mysql с данными GTFS , загруженными в нее. Я пытаюсь получить все маршруты в определенной области (5 км от центральной точки). Идея состоит в том, чтобы запросить остановки для определенной области, затем от остановок идут мысли stop_times и поездки для получения маршрутов. Моя проблема в том, что таблица 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 голосов
/ 26 апреля 2019

старайтесь избегать IN cluase и вместо этого используйте INNER JOIN

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

и убедитесь, что у вас есть индекс на

table routes  column route_id
table trips column trip_id 
table stop_times column stop_id
...