一尘不染

优化节点联接查询

sql

我有一个节点和方式数据库。一种方式包含两个或更多节点。一些节点属于多种方式,因此被称为两种或多种方式之间的“联接”。

我试图找到所有以两种或两种以上方式连接的节点。所以我正在使用这个查询,

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,但我怀疑我的问题适用于所有数据库。如何优化这种查询?


阅读 161

收藏
2021-03-08

共1个答案

一尘不染

查找所有连接两种或两种以上方式的节点的更简单方法是计算每个节点的不同方式-如下所示:

SELECT node_id, count(distinct way_id)
FROM way_nodes
GROUP BY node_id
HAVING count(distinct way_id) > 1
2021-03-08