пакетная вставка SQL - PullRequest
       1

пакетная вставка SQL

2 голосов
/ 28 августа 2011

У меня есть текстовый файл с 50k + - строк, и каждая строка содержит данные, которые должны быть извлечены из каждой строки как отдельное поле.

Программа запускается несколько раз в день.

Поскольку это мобильное приложение, я использую SQLIite и читаю каждую из этих строк по 50 тыс. По очереди, собирая необходимые данные и вставляя их в файл SQlite DB.

Я провел несколько тестов и обнаружил, что чтение только по строкам занимает всего лишь 10% фактического времени, которое требуется сейчас, все накладные расходы возникают, когда я вставляю все эти данные по одному в базу данных SQLite.

Ищем предложения по улучшению.

Ответы [ 2 ]

3 голосов
/ 28 августа 2011

Вы можете повысить производительность, используя транзакции, чтобы запрашивать сразу несколько INSERT вместо одного для каждой строки в вашем текстовом файле. Это позволит вам пакетировать операторы INSERT (попробуйте что-то вроде 100 за пакет) - это приведет к значительному увеличению производительности.

1 голос
/ 28 августа 2011

Вы можете увеличить скорость на:

  1. Выполнение INSERT в транзакции.В зависимости от объема данных, это может быть хорошей идеей сделать это в пакетах, например.1000 операторов.
  2. Используйте подготовленные операторы, чтобы минимизировать накладные расходы при разборе запроса.
  3. Если у вас есть индексы в целевой таблице, иногда полезно создать таблицу TEMPORARY с такой жеструктурировать как целевую таблицу, заполнить ее всеми данными, а затем, в конце, выдать INSERT INTO target_table SELECT * FROM temporary_table.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...