【发布时间】:2017-10-09 01:10:45
【问题描述】:
我们已将所有 GTFS 架构转换为 Maria DB 表。
https://developers.google.com/transit/gtfs/examples/gtfs-feed
所以我们有这样的表格 - 停止 - 旅行 - stop_time - 等等
然后我们有一个 SQL 查询来查找当前停靠点之后的所有停靠点,因此我们使用以下查询
SELECT DISTINCT t2.stop_id
FROM (SELECT stop_id,
trip_id,
stop_sequence
FROM stop_time
WHERE stop_id IN :stopIds) t1
inner join (SELECT stop_id,
trip_id,
stop_headsign,
stop_sequence
FROM stop_time
WHERE trip_id IN (SELECT trip_id
FROM stop_time
WHERE stop_id IN :stopIds)) t2
ON t2.trip_id = t1.trip_id
AND t2.stop_sequence > t1.stop_sequence;
但是,当我为每个停止运行此查询以在不同的表中填充一次以稍后使用结果集时,不幸的是 CPU 使用率达到 100%
我不知道为什么,在此先感谢。
【问题讨论】:
-
这里有大量的连接,所以如果你有很多记录,这可能需要处理数十亿行数据。
-
为什么不提供一些
sample data和expected result(参见stackoverflow.com/help/mcve)也许你现在正在使用 LEAD() OVER(),因为你正在使用 Mariadb -
@tadman 有什么优化查询的建议吗?
-
@Used_By_Already...将尝试提供示例数据
-
@SumitVairagar 我不确定 MySQL 是否是完成这项工作的最佳工具。看起来您需要一个更加面向图形的数据库。