Выполнение sqlite groupby и выбор операторов с 50 000 строк в IPhone 3G - PullRequest
0 голосов
/ 11 июня 2011

Кто-нибудь сталкивался с группировкой таблиц с большим количеством строк (50 КБ)?Мой 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 строк.RSEnd печатается, когда sqlite.step готов.

Большое спасибо.Я думаю, что 50 000 строк не так уж много.

Ответы [ 2 ]

0 голосов
/ 12 июня 2011

Если вы не можете создавать индексы, как быстро это было бы без использования ORDER BY, а затем сортировки с использованием Objective-C?

0 голосов
/ 11 июня 2011

Может быть, лучше в вашем случае сохранить в отдельной колонке первую букву.Таким образом, вы можете исключить 2 функции (substr и upper) из вашего запроса, так как это занимает много времени.

Выбор будет:

Select 
  count(*) as count, FirstLetter 
From 
  contact_sync2 
GROUP BY 
  FirstLetter 
ORDER BY 
  Pers_LastName COLLATE NOCASE 

Также добавьте индекс в FirstLetter.

...