я добавляю данные из vba excel с помощью adodb в базу данных 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
Я не знаю точно, какой процесс виноват, но я полагаю, что delete where
задерживает меня. в одной из таблиц около 500 000 строк, в другой около 300 000, а в другой 5000.
вот вторая часть:
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
эта часть добавляет данные. я думаю, что это относительно быстро, но я не могу быть уверен.
так что для операторов delete, возможно, мне следует создать индекс? однако, в этом случае, вероятно, потребуется время для создания индекса, и мне нужно было бы удалить его, воссоздайте его каждый раз, когда мне потребуется это сделать.
Кто-нибудь знает, как я могу заставить этот код работать быстрее?