Innodb
ALTER innoDB 表從行到頁壓縮
我的表是使用 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
有兩個原因:
- ALTER 將未壓縮的表寫入磁碟,同時
INSERT
將壓縮的頁寫入磁碟。- 我們可以在單獨的磁碟上創建新表以減少 I/O。