优化节点连接查询

时间:2010-11-01 22:02:21

标签: 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种方式和43706个节点,速度非常慢,而且每秒只能给我20-30个节点。

最初我尝试保留节点使用次数的计数,但这仍然需要很长时间。

我正在使用SQLite3,但我怀疑我的问题适用于所有数据库。如何优化这样的查询?

2 个答案:

答案 0 :(得分:1)

您是否创建了索引?

答案 1 :(得分:1)

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

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