簡體   English   中英

Mysql將表引擎MyISAM更改為InnoDB

[英]Mysql changing table engine MyISAM to InnoDB

在我的網站上,我有一個1000萬行的訪問者表。
對網站的每個請求都會向表中插入行,以防表被鎖定(通常在優化查詢中)訪問者無法進入網站
表引擎是MyISAM,我想將其更改為InnoDB
我有幾個問題:

  • 如何在不停止工作的情況下更改表引擎
  • 有一種方法可以優化InnoDB表而不鎖定它

最簡單的方法是

ALTER TABLE table_name ENGINE = InnoDB;

如果使用InnoDB引擎,則不必擔心鎖定表,因為此引擎會按行鎖定數據。

oleksii.svarychevskyi是對的,InnoDB使用行級鎖,但如果你這樣做

ALTER TABLE table_name ENGINE = InnoDB;
要將table_name從MyIsam更改為InnoDB,將會有一個元數據鎖定(在表級),因為原始表引擎是MyIsam。
如果您嘗試對table_name執行UPDATE,則此UPDATE將排隊,直到ALTER TABLE結束(如果執行SHOW FULL PROCESSLIST,您將看到與UPDATE關聯的“Waiting for table metadata lock”消息)。

暫無
暫無

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

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