我正在开发一个应用程序,它需要原始传输数据并显示即将到来的列车时刻表。我用下面的查询检索站的列表(从包含的停止时间大约50,000项表):SQLite查询:从浏览器到Android的巨大减速
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选项的问题?
实际上,我预计你的Android设备会比好台式机或笔记本电脑慢几百倍! – 2012-01-29 23:01:51
是的,但没有DISTINCT选项,它在设备上执行1秒钟。我意识到这会为查询增加更多工作,但它似乎仍然过于缓慢。我很好奇,DISTINCT通常会有如此激烈的效果。如果这是付出的代价,我需要找到另一种获取数据的方式。 – Matt 2012-01-29 23:04:50
我不知道substr函数是否缓慢。你可以通过'选择不同的stops._id作为_id,...'?至少以这种方式测试可以帮助指出问题。 – dokkaebi 2012-01-29 23:05:40