【发布时间】:2014-11-22 06:44:34
【问题描述】:
在 Nexus 5 上进行测试,运行 Lollipop 更新,然后我的 SQLite 查询现在需要永远执行,我会说比 Ice Cream Sandwich 长 3 倍、4 倍
Android 4 附带 3.7 版本的 SQLite,Android 5 现在带有改进的 3.8 版本,它应该会带来 50% 的性能提升(至少在理论上)。
但是我根本没有看到这一点,SQLite 在 Lollipop 中的性能似乎很糟糕。
与运行 Ice Cream Sandwich 的旧 Galaxy 3 并排测试我的查询需要 1-2 秒,而 Lollipop 升级查询开始需要更长的 10-15 秒。
数据库已创建适当的索引。
问题只存在于棒棒糖中。
有没有人遇到过类似的问题,有什么解决方法的建议吗?
示例查询和解释查询输出:
SELECT DISTINCT
t.route_id, s.stop_name, s.stop_id, s.stop_lat, s.stop_lon, s.location_type
FROM
stops s
INNER JOIN stop_times st ON s.stop_id=st.stop_id
INNER JOIN trips t ON t.trip_id=st.trip_id
WHERE
s.lon > -111.84006 AND s.lon < -111.81482 AND
s.lat > 34.839073 AND s.lat < 34.86432 AND
service_id IN (SELECT service_id FROM calendar WHERE saturday='1')
【问题讨论】:
-
答案是重写您的查询并添加适当的索引。如果没有数据库架构和查询本身,没有人可以帮助您。
-
我发现您的评论无效。为每个 Android 版本重写 SQL 查询不是一个有效的解决方案。如上所述,查询在 Lollipop 之外需要 1-2 秒。问题仅限于 Android 5.0。
-
所以您不希望您的查询在任何版本上都花费几毫秒?
-
毫秒会很好:) 但让我失望的是它只发生在 5 点。我将使用示例查询更新帖子。
-
我已经通过优化查询解决了这个问题。 R-Tree 似乎是解决这个问题的正确解决方案,但我想避免添加 SQLite 模块的复杂性,因为它在设备上运行。此外,我已经追踪到游标逻辑的瓶颈,我的查询本身现在需要几毫秒。我觉得你应该添加 R-Tree 指针作为解决方案,因为它在原始问题的上下文中是有效的。
标签: android performance sqlite android-5.0-lollipop