【发布时间】:2012-11-16 10:46:19
【问题描述】:
我有包含 1000 万个数据的数据集,我正在遍历它并使用数据集的值来更新计数为 2500 万个的基表。
where 子句中使用的字段是主键。
但我仍然没有获得性能,只有 1 小时内更新了 10 万条记录。
如何优化和加快在 oracle 中执行查询的时间。
我在 vb.net 中使用命令对象,连接对象
以下函数执行了 1000 万次更新查询。
public cmd_obj as new oledb.oledbcommand
Strquery="update Table1 set field1='Value from dataset' where field2='value from dataset'" ' where field2 is primary key in base table
Public Function Executenonquery(ByVal Strquery As String) As Int32
Dim intUpdated As Int32 = 0
Try
If VerifyOracleLogin() = True Then ' check oracle connection
cmd_obj.Connection = dbconn
cmd_obj.CommandText = Strquery 'strquery has update query
intUpdated = cmd_obj.ExecuteNonQuery()
return intUpdated
End If
Catch ex As Exception
WriteToErrorLog("Query Execution Error : " & Strquery, ex.Message)
Return -1
End Try
End Function
【问题讨论】:
-
你的 VB 代码在这里没什么兴趣;作为 Strquery 传入的 SQL 是什么?这就是可能出现性能问题的地方。
-
还有...如何将参数数据替换到查询中?您拥有的 ExecuteNonQuery() 方法签名是一个 反模式,它会导致可怕的 Sql 注入安全问题! 看起来您的整个数据访问层不安全,而且您的顶层优先级应该是重构它以允许正确的参数使用。