У меня есть база данных узлов и способов. Способ содержит два или более узлов. Некоторые узлы принадлежат нескольким путям и поэтому называются «соединением» между двумя или несколькими способами.Оптимизация запроса соединения узла
Я пытаюсь найти все узлы, которые соединяют два или более способов. Поэтому я использую этот запрос,
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, но я подозреваю, что моя проблема относится ко всем базам данных. Как оптимизировать такой запрос?
ли я понимаю, этот запрос правильно? Найти узлы, которые совместно используют nodeID, но не way_id? –
Найти way_nodes, используя один и тот же node_id. Цель состоит в том, чтобы получить два разных метода way_id. way_nodes содержит node_id и way_id. –
Быстрее или медленнее, когда вы запускаете его с предложением join только «wr.node_id = wl.node_id» –