mysql - 我应该为此创建一个索引吗?

标签 mysql sql excel vba

我正在使用 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/

相关文章:

SQL 条件跨越多行

c# - 带日期时间选择器的 SQL 语句

C# 在从 Excel 复制的字符串中找不到空格

php - 查找附近的邮政编码 myquery 优化

mysql - 在特定日期更新数据库记录

PHP json_encode 在 MySQL 表的第一个索引上返回空数组

Mysql 将前一行的值减去当前行

通过 VBA 执行时 R 忽略 R 脚本

excel - Inf 在 Excel 中使用 Matlab xlswrite()

php - 如何获取表中具有最大值的行