2010-03-02 593 views
4

我們的數據庫中INSERT和UPDATE語句的性能似乎正在下降,並導致我們的Web應用程序性能不佳。如何提高MySQL INSERT和UPDATE性能?

表是InnoDB,應用程序使用事務。我可以通過簡單的調整來加快速度嗎?

我想我們可能會看到一些鎖定問題,我該如何找出答案?

+1

你在這些表上有索引嗎? – 2010-03-02 22:13:00

+0

@OMG小馬,是 – mmattax 2010-03-02 23:30:14

回答

0

如果您不使用索引,它們可以幫助提高更新查詢的性能。

+0

我們正在使用索引 – mmattax 2010-03-02 23:29:56

1

我會嘗試設置你的表延遲索引更新。

ALTER TABLE {name} delay_key_write='1' 
+4

delay_key_write只適用於MyISAM表,OP表示他們使用的是InnoDB。 – MarkR 2010-03-02 22:53:19

0

我不會看鎖定/阻塞,除非併發用戶的數量隨着時間的推移而增加。

如果性能隨着時間的推移逐漸降解我想看看查詢計劃與EXPLAIN語句。

這將是有幫助的,這些從開發初期或生產環境中,爲了進行比較的結果。

滴加或添加可能需要一個索引, 或在其他職位指明的其他維護動作。

2

INSERT和UPDATE在具有索引的表上行數增加時逐漸變慢。 Innodb表甚至比MyISAM表的插入慢,並且延遲鍵寫入選項不可用。

加快速度會先保存數據到一個平面文件,然後做LOAD DATA最有效的方法,這是大約快20倍。

第二種選擇是在內存中創建表的臨時,數據加載到它,然後分批做一個INSERT INTO SELECT。一旦你在臨時表中有大約100行,將它們加載到永久表中。

此外,通過將索引文件移動到與數據文件存儲位置不同的物理硬盤驅動器中,您可以獲得速度上的小幅提升。還可以嘗試將任何bin日誌移動到不同的設備中。同樣適用於臨時文件位置。