sqlite3 массовая вставка из C? - PullRequest
2 голосов
/ 31 августа 2009

Я наткнулся на команду .import для этого (массовая вставка), но есть ли версия запроса, которую я могу выполнить с помощью sqlite3_exec ().

Я просто хотел бы скопировать содержимое небольшого текстового файла в таблицу.

Версия запроса ниже,

". Import demotab.txt mytable"

1 Ответ

6 голосов
/ 31 августа 2009

Производительность Sqlite не выигрывает от массовой вставки. Простое выполнение вставок отдельно (но в рамках одной транзакции!) Обеспечивает очень хорошую производительность.

Вы можете выиграть от увеличения размера кэша страниц sqlite; это зависит от количества индексов и / или порядка, в котором вставляются данные. Если у вас нет индексов, для чистой вставки размер кэша, вероятно, не будет иметь большого значения.

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

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

Да, и вы можете получить один из этих твердотельных накопителей Intel X25-E и убедиться, что у вас есть контроллер AHCI; -).

Я поддерживаю приложение с базами данных sqlite с приблизительно 500000000 строками (распределенными по нескольким таблицам) - большая часть которых была массово вставлена ​​с использованием простого старого begin-insert-commit: оно прекрасно работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...