mysql
  • sql
  • excel
  • vba
  • 2010-06-02 206 views 0 likes 
    0

    我使用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 
    

    這部分增加的數據。我認爲這相對較快,但我無法確定。

    所以對於刪除語句,也許我應該創建一個索引?但是,在這種情況下,創建索引可能需要一些時間,我需要在每次需要執行此操作時將其重新創建。

    任何人都知道我可以如何使這段代碼工作更快?

    回答

    1

    我沒有看到你爲什麼會需要刪除索引。只要在rowid上創建一次,如果它還沒有被定義爲每個表的主鍵,在這種情況下它已經被索引。

    最後,不是刪除然後重新插入數據,而是儘可能地做一個整體更快的更新。

    +0

    謝謝了。我對索引不太瞭解,他們多久更新一次自己? – 2010-06-02 21:56:49

    +1

    每次插入或刪除一行時,都會調整受影響表上的索引。此外,如果您更新參與索引的列並更改其行中的值,則相應的索引也會更新。 – Khorkrak 2010-06-02 22:45:46

    1

    所有表上的ROWID索引將有助於

    +0

    多久?每次?創建和刪除索引需要多長時間? – 2010-06-02 21:53:53

    +1

    一次就是這樣,MySQL就可以使用索引 – SQLMenace 2010-06-02 21:57:43

    相關問題