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