我需要将巨大的数据集(约10-40百万行)转储到SQLite数据库中。与每插入 n 个插入次数( n 可能有50,000、100,000等)进行提交相比,有一个优点?
很显然,从理论上讲,一次提交将是最快的方法。但是分批提交有优势吗?在我的情况下,要么插入所有数据,要么插入所有数据。在提交之前是否有在SQLite中进行大量插入的危险(即,我是否需要为sqlite提供更大的磁盘空间,因为它需要使用更大的临时文件?)?
我正在使用Perl DBI插入数据。
答案 0 :(得分:3)
通过使用以下方法,我在性能上有了一些改进:
设置 PRAGMA同步= OFF ,这可以防止SQLite引擎等待操作系统级别的写入完成。
set PRAGMA journal_mode = MEMORY ,它告诉SQLite引擎将日志存储在RAM中而不是磁盘中,唯一的缺点是在操作系统崩溃或电源故障的情况下无法恢复数据库
接下来,在所有插入之后创建索引。此外,每100,000条记录可以发出一次提交。