啟用MySQL壓縮
在建立壓縮表之前,請確保已啟用innodb_file_per_table配置選項,並將innodb_file_format設定為Barracuda。這些引數可以在MySQL配置檔案my.cnf或my.ini中找到,或者使用SET語句設定,而無需關閉MySQL伺服器。
要為表啟用壓縮,可以在CREATE TABLE或ALTER TABLE語句中使用ROW_FORMAT=COMPRESSED、KEY_BLOCK_SIZE或兩者。
讓我們看看建立壓縮表的語句:
查詢
SET GLOBAL innodb_file_per_table=1; SET GLOBAL innodb_file_format=Barracuda; CREATE TABLE t1 (c1 INT PRIMARY KEY) ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;
這裡:
如果指定了ROW_FORMAT=COMPRESSED,則可以省略KEY_BLOCK_SIZE。
將使用預設的頁面大小值,這相當於innodb_page_size值的一半。
如果指定了KEY_BLOCK_SIZE,則可以省略ROW_FORMAT=COMPRESSED。
壓縮將自動啟用。
要確定KEY_BLOCK_SIZE屬性的最佳值,使用者需要建立具有不同該子句值的同一表的多個副本。
完成此操作後,測量生成的.ibd檔案的大小,並確定每個檔案在實際工作負載下的效能。
KEY_BLOCK_SIZE值被視為提示。
如果innodb_strict_mode=ON,並且指定了無效的KEY_BLOCK_SIZE值,則會返回錯誤。
InnoDB資料頁的預設未壓縮大小為16KB。根據選項值的組合,MySQL將對錶的.ibd檔案使用1KB、2KB、4KB、8KB或16KB的頁面大小。
實際的壓縮演算法不受KEY_BLOCK_SIZE值的影響。
表的全部索引,包括聚簇索引,都將使用在CREATE TABLE或ALTER TABLE語句中指定的相同頁面大小進行壓縮。ROW_FORMAT和KEY_BLOCK_SIZE等表屬性不被視為InnoDB表的CREATE INDEX語法的組成部分。因此,如果指定了它們,則會被忽略。