У меня есть CSV-файл test.csv
с множеством уникальных записей типа (text,int,int)
, где текстовое поле не более 70 символов.
При выполнении следующих операторов скорость обычно составляет около 80 МБ / с:
sqlite3 db 'create table test(a text,b int,c int,primary key(a,b,c) without rowid'
pv test.csv | sqlite3 -init <(echo -e '.mode csv\n.import /dev/stdin test') db
Но при выполнении следующего оператора снова скорость обычно ниже 100 КБ / с и многоUNIQUE constraint failed
печатаются в stderr:
pv test.csv | sqlite3 -init <(echo -e '.mode csv\n.import /dev/stdin test') db
Мне кажется, что в обоих случаях SQLite нужно проверять одно и то же ограничение, так что в случае, когда ничего не записывается на диск, многонамного медленнее, чем в случае, когда все записывается на диск?
И самый важный вопрос - как я могу ускорить вторичный импорт?Эту базу данных необходимо обновлять ежедневно, и записи в основном новые, но некоторые из них уже существуют в базе данных.Это замедляет процесс импорта.
Кстати, это то же самое, что SSD и HHD, хотя SSD немного быстрее.