有没有办法通过 C 接口将整个 CSV 文件导入 SQLite?
我知道命令行导入看起来像这样,
sqlite> .mode csv <table>
sqlite> .import <filename> <table>
但我需要能够在我的程序中做到这一点。
我还应该注意,我已经成功地在 C++ 中创建了一个 CSV 阅读器,它读取 CSV 文件并将其内容逐行插入到表格中。
这样就可以完成工作,但是对于包含 730k 行的 CSV,此方法需要大约 20 分钟才能加载,这太长了。(这将是正在处理的东西的平均大小)
(机器:Intel(R) Core(TM)2 Duo CPU E8500 @ 3.16GHz 3.17GHz,4.0 GB Ram,Windows 7 64 位,Visual Studios 2010)
这对我的项目来说是不可接受的,所以我需要一种更快的方法,大约需要 2-3 分钟。
有没有办法引用文件的内存位置,所以不需要导入?如果是这样,信息的访问速度很慢吗?
SQLite 可以将 CSV 文件作为二进制数据吗?这会使导入文件更快吗?
想法?
注意:我在 C 接口中使用“:memory:”选项将数据库加载到内存中以提高速度(我希望如此)。
编辑
在做了更多优化后,我发现了这个。它解释了如何通过编写将插入语句分组到 1 个事务中。
BEGIN TRANSACTION;
INSERT into TABLE VALUES(...);
...Million more INSERT statements
INSERT into TABLE VALUES(...);
COMMIT;
这创造了性能的巨大改进。
有用的相关附注
此外,如果您要从查询结果中创建表或将查询结果插入表中,请尝试使用此方法创建表或将结果插入表中。
插入链接对于插入表格可能并不明显。执行此操作的查询如下所示。
INSERT INTO [TABLE] [QUERY]
[TABLE]
您希望[QUERY]
正在运行的查询结果进入的表在哪里。