我使用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
我不知道到底哪個進程是難辭其咎的,但我assumign的delete where
被拖延了我。其中一張桌子大約有500,000個行,另外一個大約30萬個,其他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
這部分增加的數據。我認爲這相對較快,但我無法確定。
所以對於刪除語句,也許我應該創建一個索引?但是,在這種情況下,創建索引可能需要一些時間,我需要在每次需要執行此操作時將其重新創建。
任何人都知道我可以如何使這段代碼工作更快?
謝謝了。我對索引不太瞭解,他們多久更新一次自己? – 2010-06-02 21:56:49
每次插入或刪除一行時,都會調整受影響表上的索引。此外,如果您更新參與索引的列並更改其行中的值,則相應的索引也會更新。 – Khorkrak 2010-06-02 22:45:46