簡體   English   中英

Mysql 5.5 Innodb慢插入查詢問題

[英]Mysql 5.5 Innodb slow insert query issue

我有一個存儲過程,在臨時表中插入大約3K行。 這個SP在Mysql 5.1(Windows桌面)上花了3秒鍾,同樣的SP在Mysql 5.5上大約需要2分鍾。

我嘗試了很多東西,比如通過改變innodb_buffer_pool_size等優化innodb,但沒有任何效果,然后我在stackoverflow上讀了一些東西解決了我的問題。

START TRANSACTION; 
CALL sp();
COMMIT;

上面的代碼解決了這個問題,現在我回到了3秒的執行時間。 有人可以告訴我這里到底發生了什么。 為什么我必須在5.5中添加啟動事務才能快速執行? 為什么我在5.1中不需要這個

我猜這是由於自動提交被運行禁用

START TRANSACTION; 

您可以通過手動禁用自動提交驗證它,然后運行您的proc。

SET autocommit=0;

我在mysql.ini文件中添加了以下行

innodb_flush_log_at_trx_commit=0

它似乎解決了這個問題,程序現在運行得很快。 理想情況下,對於ACID合規性,innodb_flush_log_at_trx_commit應為1。

當您在InnoDB表中插入行時,MySQL會構建primary_key並更新該行的索引。 這是針對每一行完成的,可以大大減慢插入速度。 通過將它們包裝在事務中,您實際上是強制它首先插入所有行,然后一次性重建鍵和索引。 因此性能提升。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM