当前位置: 首页 > 面试题库 >

优化节点联接查询

楚灿
2023-03-14
问题内容

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

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

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


 类似资料:
  • 问题内容: 我有一个NewsStories表格,剩下一些相关表格。每个新闻故事可以具有多个图像,类别和地址。因此查询实质上是: 通常每个故事有一些图像和地址,以及1或2个类别。NewsStories表包含大约10,000条文章。 问题在于性能相当慢(大约15-20秒,尽管它的确变化很大,有时甚至低至5秒)。 我想知道是否有更好的方法来组织查询以加快查询速度(我对SQL还是很陌生)。 尤其是,给定故

  • 问题内容: 我的应用程序使用单个查询来返回用户的所有权限,并且该单个查询具有10个INNER JOIN来创建整个结果集。 这是查询的预览(由于机密信息,我不得不更改表名): 这是执行计划(创建一些索引后,成本降低了,但是返回58k行仍需要39秒): 我该怎么做才能改善此查询? 更新 这是我创建的索引: 问题答案: 感谢您添加索引的说明。要基于表8的主要条件优化查询,您希望与WHERE子句关联的列位

  • 10.4. 查找节点的直接子节点 解析 XML 文档时,另一个有用的己技巧是查找某个特定元素的所有直接子元素。例如,在语法文件中,一个 ref 元素可以有数个 p 元素,其中每一个都可以包含很多东西,包括其他的 p 元素。你只要查找作为 ref 孩子的 p 元素,不用查找其他 p 元素的孩子 p 元素。 你可能认为你只要简单的使用 getElementsByTagName 来实现这点就可以了,但是

  • 我正在尝试解决一个容量路由问题,其中我有一组需要不同数量和不同类型项目的节点。 此外,我想允许节点删除,因为具有一种类型项目的所有节点仍然可能超过车辆容量,因此无法解决。 然而,最终所有节点都应该得到服务,因此我使用迭代方法,将每种项目类型视为单独的路由问题。 但我想知道是否可以使用分离或类似的东西来解决“全局”路由问题。感谢任何关于这是否可能的帮助。 我的方法: 首先解决A项:车辆I服务于节点1

  • 问题内容: 我希望从我的用户模型中检索一些信息,如下所示: 在主页中,我有一个 位置 过滤器,您可以在其中浏览来自国家或城市的用户。 所有字段还包含其中的用户数: 在主页上,然后我还有“学生和老师”页面,我希望仅提供有关这些国家和城市有多少老师的信息… 我想做的是创建一个对MongoDB的查询,以通过单个查询检索所有这些信息。 此刻查询如下: 问题是我不知道如何获取所需的所有信息。 我不知道如何获

  • 问题内容: 此查询需要153秒才能运行。中有数百万行。 我认为查询要花很长时间,因为where子句中的功能。但是,我需要在列上执行ltrim rtrim,而且日期也必须在格式上匹配。如何优化此查询? 说明计划: 首要的关键: 索引: 但是,在解释计划中,我看不到使用索引/主键。那是问题吗? 问题答案: 试试这个: 如果尚无时间,请从其外观(出生日期?)上删除该对象。除此之外,您还需要一些索引工作。