gpt4 book ai didi

sql - 将字符串比较 where 子句添加到内部连接会对 SQLite 产生巨大的性能影响

转载 作者:搜寻专家 更新时间:2023-10-30 19:53:45 25 4
gpt4 key购买 nike

我正在研究费城交通数据,我有一个存储 gtfs 数据的 sqlite 数据库。我有这个查询来寻找特定站点的出发时间:

SELECT "stop_time".departure_time FROM "stop_time"
INNER JOIN "trip" ON "trip".trip_id = "stop_time".trip_id

WHERE

(trip.route_id = '10726' )
-- AND (trip.service_id = '1')
AND (stop_time.stop_id = '220')
AND (time( stop_time.departure_time ) > time('08:30:45'))
AND (time( stop_time.departure_time ) < time('09:30:45'));

将 service_id 匹配到 1 的子句目前已被注释掉。如果我现在运行查询,不匹配 service_id,则需要 2 秒。如果我取消对 service_id 子句的注释,则需要 30 个。我不知道为什么,因为我已经在查看 route_id 的行程表。

有什么想法吗?

最佳答案

如果在(route_id、stop_id 和 departure_time)上定义了一个索引,而该索引在 service_id 上没有过滤器时使用,则通常会发生这种情况。一旦将其包含在 WHERE 子句中,由于它不存在于索引中,因此它需要 TABLE SCAN 并因此增加执行时间。如果您在索引定义中也包含 service_id,则 TABLE SCAN 将替换为 INDEX SCAN

关于sql - 将字符串比较 where 子句添加到内部连接会对 SQLite 产生巨大的性能影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12339362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com