Какой самый быстрый способ получить все элементы в SQLite?

Я программирую на окнах, храню информацию в sqlite. Однако я считаю, что получение всех предметов немного медленное.

Я использую следующий способ:

select * from XXX;

извлечение всех элементов из базы данных SQLite объемом 1,7 МБ занимает около 200–400 мс. Это слишком медленно. Может ли кто-нибудь помочь!
Большое спасибо!

Спасибо за ваши ответы!
Мне нужно выполнить сложную операцию с данными, поэтому каждый раз, когда я открываю приложение, мне нужно прочитать всю информацию из БД.


person sxingfeng    schedule 01.06.2010    source источник
comment
В типичном приложении вы не будете очень часто извлекать все элементы. Возможно, вам следует предоставить более подробную информацию о том, почему вам нужно это сделать.   -  person Matthew Flaschen    schedule 01.06.2010
comment
Можно ли избежать получения всех строк?   -  person lc.    schedule 01.06.2010
comment
и почему 200 мс слишком медленно? как часто вы читаете ВСЕ строки вашей базы данных? возможно, вам следует рассмотреть другой подход.   -  person Blindy    schedule 01.06.2010
comment
1,7 миллиона строк менее чем за секунду? Это звучит очень быстро, если вы спросите меня. Это, вероятно, всего в несколько раз медленнее, чем std::map, хотя вам нужно провести тест, чтобы увидеть.   -  person Joey Adams    schedule 01.06.2010
comment
1,7 МБ, а не 1,7 миллиона строк :-)   -  person James Anderson    schedule 01.06.2010
comment
Если сложная операция может быть выражена в SQLite, сделайте это в SQLite. Базы данных — это программное обеспечение, ориентированное на данные, их задача — обрабатывать данные, не пытайтесь перехитрить базу данных в ее нише. Но я не уверен, применимо ли это общее правило и к SQLite :).   -  person Pieter    schedule 01.06.2010
comment
Что вы делаете с результатами после их извлечения из БД? Записать их в файл? Хранить их в массиве?   -  person dan04    schedule 01.06.2010
comment
@sxingfeng - Можете ли вы дать мне схему данных и примерное количество строк в вашей таблице, а также пример кода, который вы использовали для получения этого измерения 200-400 мс?   -  person Jay Godse    schedule 02.06.2010


Ответы (2)


Я бы попробовал следующее:

  1. Очистите базу данных, выполнив команду "очистить".
  2. SQLite начинается с размера кеша по умолчанию, равного 2000 страниц. (Чтобы быть уверенным, запустите команду "pragma cache_size". Каждая страница имеет размер 512 байт, поэтому похоже, что у вас есть около 1 МБ кеша, которого недостаточно для хранения вашей базы данных. Увеличьте размер кеша. size, запустив "pragma default_cache_size=4000". Это должно дать вам 2 Мбайт кеша, чего достаточно, чтобы поместить всю базу данных в кеш. Вы можете запустить эти команды pragma из командной строки sqlite3 или через вашу программу, как если бы это был другой запрос.
  3. Добавьте индекс в свою таблицу в поле, с которым вы заказываете.
person Jay Godse    schedule 01.06.2010

Возможно, вы могли бы немного ускорить его, выбрав только те столбцы, которые вам нужны, но в противном случае ничто не сравнится с неупорядоченным выбором без предложения where для получения всех данных.

Кроме этого, более быстрый диск/процессор — ваш единственный вариант.

На каком оборудовании это работает?

person James Anderson    schedule 01.06.2010