簡體   English   中英

MySQL插入與選擇從myisam到innodb

[英]Mysql Insert into with select from myisam to innodb

我有一個表,供多個工作程序訪問,該工作程序抓取一批記錄,在其中記錄一些內容,並將計算結果更新回該表中。 該表當前基於MyISAM,但是由於我們對計算算法進行了一些更改,並導致了極大的提高,因此我們看到了表上的鎖負載,這是MyISAM表,這是可以預期的。 (該表中大約有650-700 000條記錄)。

處理完所有記錄后,將基於該記錄生成報告,並且該表將被截斷。 該表被截斷后,將重新啟動該表,然后該循環再次開始。

我當時正在考慮將MyISAM表切換到InnoDB以防止鎖定,但是使用INSERT INTO .. SELECT .. FROM語句(過去需要3-4分鍾)初始化該表的進程正在運行35- 40分鍾,當我決定停止它。 為什么是這樣? 有沒有辦法加快速度?

MyISAM按插入順序存儲記錄。 另一方面,InnoDB的主鍵是聚簇索引,因此記錄的存儲順序與主鍵的存儲順序相同。 因此,請確保按主鍵順序插入。 您可以在INSERT INTO ... SELECT中添加ORDER BY子句。

另外,為避免拆分頁面和重建二級索引,請在插入初始行后添加二級索引。 因此,刪除索引,然后再重新添加它們。

另外,為避免行鎖定(和自動增量鎖定)開銷,請使用LOCK TABLES顯式鎖定表。

最后,增加innodb_buffer_pool_size ,否則您的索引將建立得很慢。 默認值為8MB。

暫無
暫無

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

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