gpt4 book ai didi

c++ - 如何提高 MS Access INSERT 性能

转载 作者:搜寻专家 更新时间:2023-10-31 01:16:59 26 4
gpt4 key购买 nike

我有一个 C++ 程序,它使用 OLEDBConnection 将大约一百万条记录插入到 MS Access DB 中。为此,我运行了 INSERT INTO 查询一百万次,以便插入需要很长时间的记录。

数据在程序中以数组的形式生成,是否有其他方法可以一步将数据加载到数据库中以提高性能?

谢谢!

我用来插入当前记录的循环

for (int i = 0; i < populationSize; i++){
insertSQL = "INSERT INTO [" + pTableName + "] (" + columnsName + ") VALUES (" + columnsValue[i] + ");";`
outputDBConn->runSQLEdit(insertSQL);
}

运行 SQL 查询的方法

void DBConnector::runSQLEdit(String^ query){
SQLCMD = gcnew OleDbCommand( query, dbConnection );
SQLCMD->CommandTimeout = 30;
dbConnection->Open();
SQLCMD->ExecuteNonQuery();
dbConnection->Close();
}

最佳答案

为每个插入语句打开/关闭连接似乎非常低效

标准方法是这样的:

  1. 打开连接。
  2. 如果支持,开始交易。 (这对于具有事务的数据库通常非常重要。)
  3. 插入。 根据需要重复此步骤。
  4. 提交事务(如果支持)。
  5. 关闭连接。

更新:以下内容不适用于 MS Access。 Access does not support inserting multiple rows 来自文字。它仅支持从现有数据源插入多行。 (虽然这里有一个可能有效的 "workabout"。无论如何,最重要的事情可能是限制交易数量。)

可以做的另一件事是构建一个单个 插入命令,一次添加多条记录。这可以通过多个语句或多记录插入(如果支持)来完成。它可能会或可能不会比上述只是快得多(取决于网络延迟和数据库引擎等其他因素)并且可能需要进行调整以适应数据库的限制(例如可能只一次处理几百条记录是可行的)。如上所述,在正确使用连接/事务后才应考虑这一点。

如果我们已经制作了“批量插入”库/模块,我不会感到惊讶……并且我不使用 MS Access,所以我只能希望以上建议有所帮助:-)

快乐的编码。

关于c++ - 如何提高 MS Access INSERT 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8600337/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com