Innodb

ALTER innoDB 表從行到頁壓縮

  • October 15, 2021

我的表是使用 InnoDB 行壓縮 ( ENGINE=InnoDB ROW_FORMAT=COMPRESSED) 創建的。現在我將它們更改為頁面壓縮。根據 MariaDB 的官方文件,啟用頁面壓縮僅影響新創建的表。

因此,我創建了一個副本表並使用INSERT INTO SELECT.

我想知道ALTER表是否可以更改壓縮類型(從行到頁)?

我們可以ALTER使用普通表來使用頁面壓縮

ALTER TABLE t1 PAGE_COMPRESSED=1;

我的問題是關於刪除ROW_FORMAT=COMPRESSED和添加PAGE_COMPRESSED=1.

我嘗試了不同的方法並閱讀了很多文章。這樣做的標準方法是

ALTER TABLE t1 KEY_BLOCK_SIZE=0 `PAGE_COMPRESSED`='ON';

但是,這將保留KEY_BLOCK_SIZE在所有鍵上。

有人說這只是SHOW CREATE TABLE顯示,作為KEY_BLOCK_SIZE=8鍵的最大塊大小的標準,但值正是COMPRESSED表的值。如果表是用 來創建的,解壓後KEY_BLOCK_SIZE=1會有鍵。KEY_BLOCK_SIZE=1

另一方面,有些人說這個錯誤已在 MySQL 8 中修復,但我確認它存在於 MariaDB 10.5.9 中。

判決

ALTER是一種干淨的方式,但我贊成INSERT INTO SELECT有兩個原因:

  1. ALTER 將未壓縮的表寫入磁碟,同時INSERT將壓縮的頁寫入磁碟。
  2. 我們可以在單獨的磁碟上創建新表以減少 I/O。

引用自:https://dba.stackexchange.com/questions/289814