Intereting Posts
Обновление конфликта версий до 8.4.0 Как писать содержит запрос в SQLite fts3 полнотекстовый поиск Ограничения хранилища веб-SQL в Chrome и Android? Какова точная разница между намерением и ожиданием намерения? Поиск предложений с сетевого ресурса в поле быстрого поиска Как отправить данные с мобильных устройств Android в хранилище данных Google App Engine? Запись поверхности с использованием MediaCodec Listview – нижний колонтитул внизу экрана Избегание дубликатов ресурсов в проекте android Каков правильный способ вставки / обновления / удаления в Android SQLiteDatabase с использованием строки запроса? SDK Manager.exe не работает Конкатенация файлов mp4 в Android с помощью halfninja ffmpeg Как поместить несколько элементов в одну строку в ListView? Отправить запрос на веб-службу каждые 5 секунд Пользовательский вид Android не обрабатывает прозрачность / альфа в правильном направлении

Как достичь наилучшей производительности с помощью SQLite в Android?

Я заметил, что существует несколько способов выполнения операций SQLite (запрос, вставка, обновление, удаление), а некоторые из них могут быть быстрее остальных. Многие веб-сайты предоставляют разные советы, а некоторые конфликтуют с остальными.

  1. Похоже, что использование транзакции для массовой вставки как-то быстрее, чем в цикле.

    Как так? Каков наилучший способ достижения наилучшей производительности при использовании SQLite? Как работает sqlite на Android?

  2. Путаница с использованием InserHelper и ContentValues , как показано здесь .

    Как работает InserHelper и будет ли он всегда быстрее, чем ContentValues ? Поможет ли это ускорить транзакцию?

  3. Путаница в других структурах SQL. Я помню, что добавление индексов повысило бы производительность запросов, связанных с индексами. Это правда и для Android? Это хорошая практика?

  4. Я слышал, что в некоторых случаях лучше не использовать поток пользовательского интерфейса для операций с БД. В каких случаях это рекомендуется? Как и в том, как медленно может работать БД? Если БД становится 70 МБ, означает ли это, что он будет намного медленнее, а поток пользовательского интерфейса никогда не сможет его обработать?

Solutions Collecting From Web of "Как достичь наилучшей производительности с помощью SQLite в Android?"

Как так?

Транзакции включают дисковый ввод-вывод. Гораздо дешевле сделать один более крупный кусок дискового ввода-вывода, чем много маленьких кусков дискового ввода-вывода.

Как работает InserHelper и будет ли он всегда быстрее, чем contentValues?

Цитирование документации : «Этот класс позволяет пользователям делать несколько вставок в таблицу, но скомпилировать оператор вставки SQL только один раз, что может повысить производительность».

Упадет ли она со скоростью транзакции еще дальше?

Предположительно, да.

Это правда и для андроида?

Индексы могут увеличить скорость запроса, если вы создадите правильные индексы для любых запросов, которые вы выполняете. Индексы всегда уменьшают скорость вставки / обновления / удаления, так как теперь эти индексы необходимо обновить. Это не имеет ничего общего с Android.

Это хорошая вещь для использования?

Это невозможно ответить абстрактно. Это не имеет ничего общего с Android.

Лучше не использовать поток пользовательского интерфейса для операций БД

Верный.

В каких случаях это будет рекомендовано?

Никогда не рекомендуется выполнять какие-либо дисковые операции ввода-вывода в основном потоке приложения.

Как медленно может работать БД?

Столетия. Вероятно, к тому времени что-то не удастся в устройстве, или у него закончится заряд батареи.

Если БД становится 70 МБ, означает ли это, что он будет намного медленнее

Это зависит от того, что вы с ним делаете.

И нить пользовательского интерфейса никогда не должна справляться с этим?

Верный.