如何提高MS Access插入性能 我有一个C++程序,使用OLeDB连接将大约一百万的记录插入到MS Access数据库中。为此,我在查询中运行了数百万次INSERT,以便插入需要相当长时间的记录
数据是以数组的形式在程序中生成的,这是否是我可以在一个步骤中将数据加载到数据库中以提高性能的其他方法 谢谢 当前用于插入记录的循环如何提高MS Access插入性能 我有一个C++程序,使用OLeDB连接将大约一百万的记录插入到MS Access数据库中。为此,我在查询中运行了数百万次INSERT,以便插入需要相当长时间的记录,c++,ms-access,oledbconnection,C++,Ms Access,Oledbconnection,数据是以数组的形式在程序中生成的,这是否是我可以在一个步骤中将数据加载到数据库中以提高性能的其他方法 谢谢 当前用于插入记录的循环 for (int i = 0; i < populationSize; i++){ insertSQL = "INSERT INTO [" + pTableName + "] (" + columnsName + ") VALUES (" + columnsValue[i] + ");";` outputDBConn->runSQLEdi
for (int i = 0; i < populationSize; i++){
insertSQL = "INSERT INTO [" + pTableName + "] (" + columnsName + ") VALUES (" + columnsValue[i] + ");";`
outputDBConn->runSQLEdit(insertSQL);
}
为每个insert语句打开/关闭连接似乎效率很低
标准方法类似于:
愉快的编码。不要在每个命令中插入一个。 将代码更改为如下内容:
string strSQLCommand;
for (int i = 0; i < populationSize; i++){
strSQLCommand += "INSERT INTO [" + pTableName + "] (" + columnsName + ") VALUES (" + columnsValue[i] + ");";`
}
outputDBConn->runSQLEdit(strSQLCommand );
字符串strSQLCommand;
对于(int i=0;irunSQLEdit(strSQLCommand);
我不确定命令的最大缓冲区大小是多少,所以请执行一些检查,然后获得最佳值,以便在每次X插入时执行一些“中断”。MS Access和一百万条记录似乎不是一对好组合。您听说过SQLite吗?将数组写入CSV并一步将其加载到Access中可能是最快的方法。请确保在加载数据的表上没有索引。谢谢,但在我看来,MS Access一次不支持多个SQL命令,因此每次只能执行一次插入操作……谢谢pst,在我将打开/关闭操作移出循环后,访问时间要短得多。不幸的是,MS Access一次只支持一个SQL命令……@Raymond:(我发现了这一点,这是同意的。请确保,像另一篇文章一样,您使用单个事务(或多个批处理事务),以避免每次插入后自动提交的开销。(如果您仅达到大约60行/秒,我会怀疑事务限制了吞吐量。)
string strSQLCommand;
for (int i = 0; i < populationSize; i++){
strSQLCommand += "INSERT INTO [" + pTableName + "] (" + columnsName + ") VALUES (" + columnsValue[i] + ");";`
}
outputDBConn->runSQLEdit(strSQLCommand );