SQLite查询:从浏览器到Android的巨大减速

时间:2012-01-29 22:56:23

标签: android sqlite

我正在开发一款应用程序,它可以获取原始公交数据并显示即将到来的列车时刻表。我使用以下查询来检索工作站列表(从包含大约50,000个停止时间条目的表中):

SELECT DISTINCT SUBSTR(stops._id, 0, LENGTH(stops._id)) as _id, stops.stop_name 
FROM trips, stop_times, stops                                  
WHERE trips._id = 'B'
AND trips.trip_id = stop_times._id 
AND stop_times.stop_id = stops._id

我在SQLite浏览器中运行此查询,并在大约0.8秒内执行。但是当我使用rawQuery()在DatabaseHelper类中执行它时,我的物理设备上需要超过5分钟。我添加了一些日志记录语句来查看减速发生的位置,看起来这是查询本身需要很长时间,而不是View的膨胀。当我在没有DISTINCT选项的情况下执行相同的查询时,它会在大约1秒内执行。

我可以理解Android库的执行时间比浏览器要长一些,但速度应该不会慢几百倍。是否有关于DISTINCT选项导致此问题的内容?

1 个答案:

答案 0 :(得分:0)

DISTINCT需要时间来处理,因为它是排序和选择的问题。如果你有大量数据,DISTINCT只会让它变得更糟。我建议你将查询细分为较小的部分和/或以实际方式进行过滤