Computer >> Máy Tính >  >> Lập trình >> MySQL

Bật nén MySQL


Trước khi tạo bảng nén, hãy đảm bảo rằng tùy chọn cấu hình innodb_file_per_table được bật và innodb_file_format được đặt thành Barracuda. Các tham số này có thể được tìm thấy trong tệp cấu hình MySQL my.cnf hoặc my.ini hoặc với câu lệnh SET mà không cần phải tắt máy chủ MySQL.

Để bật tính năng nén cho một bảng, các mệnh đề ROW_FORMAT =COMPRESSED, KEY_BLOCK_SIZE hoặc cả hai có thể được sử dụng trong câu lệnh CREATE TABLE hoặc ALTER TABLE.

Hãy để chúng tôi xem các câu lệnh để tạo một bảng nén -

Truy vấ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;

Đây,

  • Nếu ROW_FORMAT =COMPRESSED được chỉ định, KEY_BLOCK_SIZE có thể bị bỏ qua.

  • Giá trị kích thước trang mặc định được sử dụng và giá trị này tương đương với một nửa giá trị innodb_page_size.

  • Nếu KEY_BLOCK_SIZE được chỉ định, ROW_FORMAT =COMPRESSED có thể bị bỏ qua.

  • Tính năng nén được bật tự động.

  • Để xác định giá trị tốt nhất cho thuộc tính KEY_BLOCK_SIZE, người dùng cần tạo nhiều bản sao của cùng một bảng với các giá trị khác nhau cho mệnh đề này.

  • Sau khi hoàn thành việc này, hãy đo kích thước của các tệp .ibd thu được và xác định mức độ hiệu quả của từng tệp này với khối lượng công việc thực tế.

  • Giá trị KEY_BLOCK_SIZE được coi là một gợi ý.

  • Nếu innodb_strict_mode =ON, nếu giá trị KEY_BLOCK_SIZE không hợp lệ được chỉ định, nó sẽ trả về lỗi.

  • Kích thước không nén mặc định của các trang dữ liệu InnoDB được coi là 16KB. Tùy thuộc vào sự kết hợp của các giá trị tùy chọn, MySQL sử dụng kích thước trang 1KB, 2KB, 4KB, 8KB hoặc 16KB cho tệp .ibd của bảng.

  • 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ả các chỉ mục của bảng, bao gồm cả chỉ mục được phân cụm sẽ được nén bằng cách sử dụng cùng một kích thước trang, được chỉ định trong câu lệnh CREATE TABLE hoặc ALTER TABLE. Các thuộc tính bảng như ROW_FORMAT và KEY_BLOCK_SIZE không được coi là một phần của cú pháp CREATE INDEX cho bảng InnoDB. Do đó, chúng sẽ bị bỏ qua nếu chúng được chỉ định.