2013-12-17 86 views
1

我有一個更新腳本,每晚更新我的數據庫。InnoDB小更新很慢,性能問題

這是一個小型數據庫〜10K項目。 對於每個表,更新都很快。連接表上的速度非常慢。

連接表是如下項目表與表型之間的聯繫:

Item.Code <-> JoinTable.RefCode (VARCHAR 30), JoinTable.IdType(int 11) <-> Type.id 

發動機是InnoDB的。引用表上有兩個外鍵和兩個列上的唯一鍵。此外,爲了允許外鍵,每列都有索引。

我使用下面的SQL查詢來更新表:

INSERT INTO JoinTable (id, RefCode, IdType) 
    VALUES (NULL, "AAA", 9584) 
ON DUPLICATE KEY UPDATE 
    id = LAST_INSERTED_ID(id), 
    refCode = values(refCode), 
    refType = values(refType) 

所以,主要的問題是運行約30分鐘15K引用的ID。

當我使用MyISAM引擎時,它大約2秒。但沒有更多的外鍵。

據我所知,MyISAM刪除外鍵,速度更快,但我認爲30分鐘這麼小的數據庫遠不是正常的。

請問您能幫我增加表演嗎?

回答

0

編輯MySQL配置中的InnoDB設置並重新啓動MySQL守護進程。他們都以「innodb_」開頭,並會解釋他們的目的。

我更改了innodb_buffer_pool_size和innodb_log_file_size。

0

改變插入的使用置之不理,並儘量不VALUES()

INSERT IGNORE INTO JoinTable (id, RefCode, IdType) 
    VALUES (NULL, "AAA", 9584)   
    ON DUPLICATE KEY UPDATE 
    id = LAST_INSERTED_ID(id), 
    refCode = refCode, 
    refType = refType 

它也可能是您的InnoDB緩衝大小小。

+0

你好,謝謝你的回覆。 IGNORE並沒有改變很多,它更快,但仍然在幾分鐘內計算。我沒有設置wam mysql Innodb參數,然後我假設我應該從那裏啓動以解決問題,但仍然使用innodb緩衝區大小爲1G,但沒有任何更改。 – user3111671

+0

如果你運行它沒有函數values()?這是怎麼回事? –