Оптимизация запроса соединения с узлом

У меня есть база данных узлов и способов. Способ содержит два или более узлов. Некоторые узлы принадлежат нескольким путям и поэтому называются «соединением» между двумя или несколькими способами.

Я пытаюсь найти все узлы, которые объединяют два или несколько способов. Поэтому я использую этот запрос,

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, но я подозреваю, что моя проблема относится ко всем базам данных. Как оптимизировать такой запрос?

Более простой способ найти все узлы, которые объединяют два или более способа, состоят в том, чтобы подсчитать различные пути для узла – например:

 SELECT node_id, count(distinct way_id) FROM way_nodes GROUP BY node_id HAVING count(distinct way_id) > 1 

Вы создали индексы?