我应该为此创build一个索引?

我使用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是拖延我。 其中一张桌子大约有五十万行,另外一个大约三十万,其他五千个。

这里是第二部分:

 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 

这部分增加了数据。 我觉得这个比较快,但是我不能确定。

所以对于删除语句,也许我应该创build一个索引? 然而,在这种情况下,它可能需要时间来创build索引,我将需要删除它重新创build它,每次我需要这样做。

任何人都知道我可以如何使这个代码工作更快?

我不明白为什么你需要删除索引。 只要在rowid上创build一次,如果它没有被定义为每个表的主键,在这种情况下它已经被索引。

最后,而不是删除,然后重新插入数据,你可能可能如果可能做一个更新,这将是更快的整体。

所有表格的rowid索引都会有所帮助