2011-01-21 39 views
3

我最近已將我的數據庫表從MYISAM更改爲INNODB,並且遇到查詢的超時錯誤,主要是插入操作。我以前使用的一個函數花費了2秒鐘時間插入,刪除和更新大約30個MYISAM表中的大量記錄集,但現在它們是INNODB,該函數會導致PHP超時。如何加快可與MYISAM性能相媲美的INNODB查詢?

超時設置爲60秒。我已經足夠優化我的腳本了,即使仍然有很多查詢,它們被合併在一起(多次插入,多次刪除等),腳本現在需要大約25秒,這大大增加了看起來在至少60秒。

當以前使用MYISAM時,這個持續時間仍然快10倍以上,在我處理這些查詢的過程中是否有任何錯誤?還是有任何設置可以幫助演出?目前MySQL正在使用安裝的默認設置。

的查詢是沒有什麼特別的,DELETE ... WHERE ...簡單的邏輯,同樣與INSERTUPDATE查詢。

+0

您可以發佈您的表格定義嗎? – 2011-01-21 04:19:38

回答

2

很難說不知道你的環境太多,但這可能是更多的數據庫調優問題。在預算硬件上,InnoDB的速度非常慢,每個寫入操作都會強制刷新。 (這將影響寫入,不能讀取。)

例如,你可能要像選擇讀了起來:

innodb_flush_log_at_trx_commit=2 
sync_binlog=0 

通過避免你也許可以大大加快您的應用程序的刷新,但在如果服務器崩潰,潛在的數據丟失成本。

如果數據丟失是你絕對無法忍受的事情,那麼另一種選擇是使用更好的硬件。

0

Innodb的建立哈希索引,它通過傳遞BTREE索引和使用散列,這對每個查詢更快

+0

InnoDB只使用BTREE索引。 http://dev.mysql.com/doc/refman/5.0/en/create-index.html(僅在評論之上) – 2011-01-21 04:39:18

+0

儘管InnoDB存儲引擎將始終構造表的B樹索引,但它也可能創建一個自適應散列索引,如果它相信會提高性能。 http://dev.mysql.com/doc/refman/5.5/en/innodb-adaptive-hash.html – 2011-01-21 06:32:09

1

運行explain加快通過索引查找。也就是說,如果緩慢查詢是select foo from bar;,請運行explain select foo from bar;

檢查計劃,並根據需要添加索引。重新運行解釋,並確保正在使用索引。

相關問題