[英]InnoDB Small update very slow, performance issue
我有一個更新腳本,它每晚都會更新我的數據庫。
這是一個約有1萬個項目的小型數據庫。 對於每個表,更新速度很快,但只有一個。 在連接表上這非常慢。
聯接表是項目表和類型表之間的鏈接,如下所示:
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)
因此,它的主要問題是15k引用ID的運行時間約為30分鍾。
當我使用MyISAM引擎時,大約需要2秒鍾。 但沒有其他外鍵。
我了解MyISAM刪除外鍵,而且速度更快,但是我認為對於如此小的數據庫,30分鍾的時間是不正常的。
你能幫我提高表演嗎?
在MySQL配置中編輯InnoDB設置,然后重新啟動MySQL守護程序。 它們都以“ innodb_”開頭,並將對其目的進行解釋。
我更改了innodb_buffer_pool_size和innodb_log_file_size。
更改插入以使用IGNORE,然后嘗試不使用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緩沖區大小太小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.