Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Bật nén (Compression) cho bảng InnoDB trong MySQL

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ửa innodb_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_SIZE tối ưu, tạo nhiều bản sao bảng với giá trị khác nhau, đo kích thước file .ibd và 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_SIZE khô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ính ROW_FORMAT và KEY_BLOCK_SIZE không thuộc cú pháp CREATE INDEX cho bảng InnoDB, nên bị bỏ qua nếu chỉ định.