任何人都有使用大量行(50k)对数据表进行分组的经历? 我的iPhone 3G需要11秒!用于按语句执行分组。
2011-06-11 09:20:50.719 crmclient[1040:307] Begin Select count(*) as count, substr(upper(Pers_LastName),1,1) as identifier From contact_sync2 WHERE 1=1 GROUP BY substr(upper(Pers_LastName),1,1) order by Pers_LastName COLLATE NOCASE
2011-06-11 09:20:50.736 crmclient[1040:307] End
2011-06-11 09:21:05.047 crmclient[1040:307] RSEnd
2011-06-11 09:21:05.534 crmclient[1040:307] Begin Select Pers_PersonId, Pers_LastName || ', ' || Pers_FirstName AS Pers_FullName From contact_sync2 WHERE 1=1 order by Pers_LastName COLLATE NOCASE LIMIT 0,140
2011-06-11 09:21:05.546 crmclient[1040:307] End
2011-06-11 09:21:13.426 crmclient[1040:307] RSEnd
第一个给我整个表的结构,以显示在iPhone上。 第二个给了我前140行。完成sqlite.step后会打印RSEnd。
非常感谢你。我认为50.000行并不多。
答案 0 :(得分:0)
在您的情况下,将第一个字母保留在单独的列中可能更好。通过这种方式,您可以从查询中消除2个函数(substr和upper),因为这些需要时间。
选择将是:
Select
count(*) as count, FirstLetter
From
contact_sync2
GROUP BY
FirstLetter
ORDER BY
Pers_LastName COLLATE NOCASE
还在FirstLetter上添加索引。
答案 1 :(得分:0)
如果你不能创建索引,没有使用ORDER BY,然后使用Objective-C进行排序会有多快?