有没有办法通过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 bit,Visual studios 2010)
这对我的项目来说是不可接受的,所以我需要一种更快的方式,大概需要2-3分钟。
有没有办法引用文件的内存位置,所以不需要导入?如果是这样,信息访问速度慢?
SQLite可以将CSV文件作为二进制数据吗?这会更快地导入文件吗?
想法?
注意:我在C接口上使用“:memory:”选项将DB加载到内存中以提高速度(我希望)。
在做了一些更优化之后,我找到了this。它解释了如何通过编写将插入语句分组为1个事务。
BEGIN TRANSACTION;
INSERT into TABLE VALUES(...);
...Million more INSERT statements
INSERT into TABLE VALUES(...);
COMMIT;
这创造了巨大的性能提升。
有用的相关备注
此外,如果您要查询查询结果中的创建表或将查询结果插入表格,请尝试this创建表格,或this将结果插入表格。
插入链接可能不适合插入表格。执行此操作的查询如下所示。
INSERT INTO [TABLE] [QUERY]
其中[TABLE]
是您希望运行的查询的[QUERY]
结果的表格。
答案 0 :(得分:2)
我已经成功地用C ++创建了一个CSV读取器,它读取一个CSV文件并逐行将其内容插入到一个表格中......需要大约20分钟才能加载
将所有插入内容放入一个事务中 - 或者每个事务至少批量处理100或1000行 - 我希望您的程序运行得更快。