я должен создать индекс для этого? - PullRequest
0 голосов
/ 03 июня 2010

я добавляю данные из 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, возможно, мне следует создать индекс? однако, в этом случае, вероятно, потребуется время для создания индекса, и мне нужно было бы удалить его, воссоздайте его каждый раз, когда мне потребуется это сделать.

Кто-нибудь знает, как я могу заставить этот код работать быстрее?

Ответы [ 2 ]

1 голос
/ 03 июня 2010

Я не понимаю, почему вам нужно было бы удалить индекс. Просто создайте его один раз в rowid, если он еще не определен как первичный ключ в каждой из этих таблиц, и в этом случае он уже проиндексирован.

Наконец, вместо удаления, а затем повторной вставки данных вы, возможно, возможно, если возможно, сделаете обновление, которое будет быстрее в целом.

1 голос
/ 03 июня 2010

индекс для rowid для всех таблиц помог бы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...