У меня есть база данных узлов и путей. Путь содержит два или более узлов. Некоторые узлы принадлежат нескольким путям и поэтому называются «объединением» между двумя или более путями.
Я пытаюсь найти все узлы, которые соединяются двумя или более способами. Поэтому я использую этот запрос,
SELECT *
FROM way_nodes wl
JOIN way_nodes wr
ON wr.node_id = wl.node_id AND wr.way_id != wl.way_id
Таблица way_nodes содержит список узлов в каждом направлении.
Однако это ужасно медленно в моей базе данных с 9 021 маршрутом и 43 706 узлами, и дает мне только 20-30 узлов в секунду.
Первоначально я пытался вести подсчет количества раз, когда узел используется, но это все еще занимает много времени.
Я использую SQLite3, но я подозреваю, что моя проблема относится ко всем базам данных. Как оптимизировать такой запрос?