首页 > 解决方案 > SQLite 批量提交与即时提交以进行大量批量插入

问题描述

我需要将巨大的(约 10-40 百万行)庞大的数据集转储到 SQLite 数据库中。对于每n次插入(n可以是 50,000、100,000 等)与仅在插入整个 4000 万行之后进行提交相比,是否有优势。

显然,理论上单次提交将是最快的方式。但是批量提交有优势吗?在我的情况下,要么是所有数据都被插入,要么是非被插入。在进行提交之前在 SQLite 中进行大量插入是否有任何危险(即我是否需要为 sqlite 提供更大的磁盘空间,因为它需要使用更大的临时文件?)?

我正在使用 Perl DBI 插入数据。

标签: sqlsqliteperl

解决方案


通过使用以下内容,我获得了一些性能改进:

设置PRAGMA synchronous = OFF这可以防止 SQLite 引擎等待操作系统级别的写入完成。

set PRAGMA journal_mode = MEMORY这告诉 SQLite 引擎将日志存储在 RAM 而不是磁盘中,唯一的缺点是在操作系统崩溃或电源故障的情况下无法恢复数据库。

接下来,在所有插入后创建索引。此外,您可以在每 100,000 条记录后发出一次提交。


推荐阅读