我正在使用 adodb 将 vba excel 中的数据添加到 mysql 数据库中
一切都很好,但很慢。整个过程大约需要5秒。
我相信它慢的原因是因为我正在过滤它:
Dim rowid_batchinfo As String
rs.Filter = "datapath='" + dpath + "' and analystname='" + aname + "' and reportname='" + rname + "' and batchstate='" + bstate + "'"
If Not rs.EOF Then
rowid_batchinfo = rs.Fields("rowid")
cn.Execute "delete from batchinfo where rowid=" + rowid_batchinfo
cn.Execute "delete from calibration where rowid='" + rowid_batchinfo + "'"
cn.Execute "delete from qvalues where rowid='" + rowid_batchinfo + "'"
End If
我不知 Prop 体应该归咎于哪个进程,但我假设delete where
耽误了我。其中一个表大约有 500,000 行,另一个表大约有 300,000 行,另一个表大约有 5,000 行。
这是第二部分:
With rs
.AddNew ' create a new record
' add values to each field in the record
.Fields("datapath") = dpath
.Fields("analysistime") = atime
.Fields("reporttime") = rtime
.Fields("lastcalib") = lcalib
.Fields("analystname") = aname
.Fields("reportname") = rname
.Fields("batchstate") = bstate
.Fields("instrument") = instrument
.Update ' stores the new record
End With
' get the last id
Set rs = cn.Execute("SELECT @@identity", , adCmdText)
capture_id = rs.Fields(0)
'MsgBox capture_id
rs.Close
Set rs = Nothing
这部分添加数据。我认为这相对较快,但我不能确定。
所以对于删除语句,也许我应该创建一个索引?但是,在这种情况下,创建索引可能需要一些时间,并且每次需要时我都需要将其删除并重新创建它。
有人知道如何让这段代码运行得更快吗?
最佳答案
我不明白为什么你需要删除索引。如果 rowid 尚未定义为每个表上的主键,则只需在 rowid 上创建一次即可,在这种情况下,它已建立索引。
最后,如果可能的话,您可以进行更新,而不是删除然后重新插入数据,这样总体上会更快。
关于mysql - 我应该为此创建一个索引吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2961834/