我需要使用VBA模块每6小时在Oracle数据库表中插入超过一千行。在每次运行期间,在VBA中完成一些复杂的预测计算,并且必须将结果值插入到数据库中。
典型输出范围包含1000多行和13列。
目前我逐行插入,而且每次插入后都会运行自动提交(ADO DB 默认)。是否有更好的方法或流程来改善绩效?
目前大约需要20到40分钟,具体取决于服务器负载。任何性能改进建议。
答案 0 :(得分:3)
每次插入后都不要提交(如果这符合您的要求)
考虑使用附加提示帮助
不知道VBA(不再),但寻找批量插入,即一次性插入多个语句而不是单独插入每个插入语句的东西
使用准备陈述
考虑在插入
答案 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秒的时间。 :)