Ответ 1
Производительность Sqlite не выигрывает от массовой вставки. Простое выполнение вставок отдельно (но в рамках одной транзакции!) Обеспечивает очень хорошую производительность.
Вы можете извлечь выгоду из увеличения размера кеша страницы sqlite; который зависит от количества индексов и/или порядка, в котором данные вставляются. Если у вас нет индексов, для чистой вставки размер кеша, вероятно, не имеет большого значения.
Обязательно используйте подготовленный запрос, а не регенерировать план запроса в самом внутреннем цикле. Крайне важно обернуть заявления в транзакцию, поскольку это позволяет избежать необходимости файловой системы для синхронизации базы данных с диском - после этого частично транзакция с атомами прерывается в любом случае, что означает, что все fsync() задерживаются до завершения транзакции.
Наконец, индексы ограничивают вашу производительность вставки, поскольку их создание несколько дорого. Если вы действительно имеете дело с большим количеством данных и начинаете с пустой таблицы, может быть полезно добавить индексы после данных - хотя это не огромный фактор.
О, и вы, возможно, захотите получить один из этих SSD Intel X25-E и убедитесь, что у вас есть контроллер AHCI; -).
Я поддерживаю приложение с sqlite db размером около 500000000 строк (разбросано по нескольким таблицам) - большая часть из которых была вставлена в массу с использованием простого старого begin-insert-commit: он отлично работает.