База данных Android SQLite: медленная вставка

Мне нужно проанализировать довольно большой файл XML (варьирующийся от ста до нескольких сотен килобайт), что я делаю с помощью Xml # parse (String, ContentHandler) . В настоящее время я тестирую это с помощью файла размером 152 КБ.

Во время синтаксического анализа я также вставляю данные в базу данных SQLite, используя вызовы, подобные следующим: getWritableDatabase (). Insert (TABLE_NAME, "_id", values) . Все это вместе занимает около 80 секунд для тестового файла 152 КБ (что сводится к вставке примерно 200 строк).

Когда я закомментирую все операторы вставки (но оставлю во всем остальном, например, при создании ContentValues ​​ ] и т. д.) тот же файл занимает всего 23 секунды.

Это нормально для операций базы данных, чтобы иметь такие большие издержки? Могу ли я что-нибудь с этим сделать?

91
задан David 16 December 2013 в 13:56
поделиться

2 ответа

Вы должны выполнять пакетную вставку.

Псевдокод:

db.beginTransaction();
for (entry : listOfEntries) {
    db.insert(entry);
}
db.setTransactionSuccessful();
db.endTransaction();

Это чрезвычайно увеличило скорость вставки в моих приложениях.

Обновление:
@Yuku предоставил очень интересную запись в блоге: Android использует inserthelper для более быстрой вставки в базу данных sqlite

189
ответ дан 24 November 2019 в 06:40
поделиться

Если в таблице есть индекс, подумайте о том, чтобы удалить его перед вставкой записей, а затем добавить обратно после того, как вы зафиксировали свои записи.

3
ответ дан 24 November 2019 в 06:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: