Trước khi tạo bảng nén, đảm bảo tùy chọn innodb_file_per_table đã bật và innodb_file_format đặt là Barracuda. Các tham số này trong file cấu hình my.cnf hoặc my.ini, hoặc đặt bằng SET mà không cần tắt server.
Để bật nén cho bảng, dùng mệnh đề ROW_FORMAT=COMPRESSED, KEY_BLOCK_SIZE, hoặc cả hai trong CREATE TABLE hoặc ALTER TABLE.
Tạo bảng nén
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;
Lưu ý:
- Nếu chỉ định
ROW_FORMAT=COMPRESSED, có thể bỏKEY_BLOCK_SIZE. Kích thước trang mặc định = nửainnodb_page_size. - Nếu chỉ định
KEY_BLOCK_SIZE, có thể bỏROW_FORMAT=COMPRESSED. Nén tự động bật. - Để tìm giá trị
KEY_BLOCK_SIZEtối ưu, tạo nhiều bản sao bảng với giá trị khác nhau, đo kích thước file.ibdvà test với tải thực tế. KEY_BLOCK_SIZEđược xem là gợi ý (hint).- Nếu
innodb_strict_mode=ON, giá trịKEY_BLOCK_SIZEkhông hợp lệ sẽ báo lỗi. - Kích thước trang dữ liệu InnoDB mặc định không nén = 16KB. Tùy tổ hợp tùy chọn, MySQL dùng trang 1KB, 2KB, 4KB, 8KB, hoặc 16KB cho file
.ibd. - Thuật toán nén thực tế không bị ảnh hưởng bởi giá trị
KEY_BLOCK_SIZE. - Tất cả chỉ mục của bảng (kể cả clustered index) nén cùng kích thước trang chỉ định trong
CREATE TABLE/ALTER TABLE. Thuộc tínhROW_FORMATvàKEY_BLOCK_SIZEkhông thuộc cú phápCREATE INDEXcho bảng InnoDB, nên bị bỏ qua nếu chỉ định.