在IPhone 3G中执行sqlite group by并选择50.000行的语句

时间:2011-06-11 07:24:05

标签: iphone performance sqlite

任何人都有使用大量行(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行并不多。

2 个答案:

答案 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进行排序会有多快?