有没有办法在将行插入Oracle DB时提高性能?

时间:2012-03-06 07:13:47

标签: oracle vba adodb

我需要使用VBA模块每6小时在Oracle数据库表中插入超过一千行。在每次运行期间,在VBA中完成一些复杂的预测计算,并且必须将结果值插入到数据库中。

典型输出范围包含1000多行和13列。

目前我逐行插入,而且每次插入后都会运行自动提交(ADO DB 默认)。是否有更好的方法或流程来改善绩效?

目前大约需要20到40分钟,具体取决于服务器负载。任何性能改进建议。

3 个答案:

答案 0 :(得分:3)

  1. 每次插入后都不要提交(如果这符合您的要求)

  2. 考虑使用附加提示帮助

  3. 不知道VBA(不再),但寻找批量插入,即一次性插入多个语句而不是单独插入每个插入语句的东西

  4. 使用准备陈述

  5. 考虑在插入

  6. 期间禁用约束

答案 1 :(得分:0)

您可能无法接受,但删除表上的任何索引,然后重新创建一次就会有所帮助。 (节省了必须更新每个INSERT索引的开销)

答案 2 :(得分:0)

我有自己的这个问题。我的问题是我打开和关闭每个插入的连接。这意味着使用15分钟导入大约1000行。

我通过保持连接打开并在再次关闭连接之前用循环向DB发送新的执行语句来解决这个问题。

这是我的VBA:

' Setup the connection to the DB
Set conn = New ADODB.Connection
strConnection = "Provider=OraOLEDB.oracle;Data Source=connectionstring;User Id=username;Password=yourpasswrod;"

' Open DB connection
conn.ConnectionString = strConnection
conn.Open

Do Until IsEmpty(ActiveCell)
    conn.Execute ("insert into my_table ( user, user_info) values ('1', '" & ActiveCell.value &"')")
Loop

conn.Close
Set conn = Nothing

这减少了导入约30秒的时间。 :)