ก่อนสร้างตารางบีบอัด ต้องตรวจสอบให้แน่ใจว่า:
innodb_file_per_table=ONinnodb_file_format=Barracuda
ตั้งค่าได้ใน my.cnf/my.ini หรือด้วย SET โดยไม่ต้องรีสตาร์ท
การสร้างตารางบีบอัด
ใช้ clause ROW_FORMAT=COMPRESSED, KEY_BLOCK_SIZE หรือทั้งคู่ ใน CREATE TABLE หรือ ALTER TABLE
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เป็นค่าประมาณ (Hint) ไม่ใช่ค่าบังคับ- หาก
innodb_strict_mode=ONและระบุ KEY_BLOCK_SIZE ไม่ถูกต้อง -> Error
ขนาดหน้า (Page Size)
ขนาดเริ่มต้น 16KB ขึ้นกับตัวเลือก MySQL ใช้ 1KB, 2KB, 4KB, 8KB, หรือ 16KB สำหรับไฟล์ .ibd
การทดสอบค่า KEY_BLOCK_SIZE ที่ดีที่สุด
- สร้างตารางเดียวกันหลาย bản สลับค่า KEY_BLOCK_SIZE
- วัดขนาดไฟล์ .ibd ที่ได้
- ทดสอบประสิทธิภาพกับ Workload จริง
ข้อสังเกตเพิ่มเติม
- ดัชนีทั้งหมด (รวม Clustered Index) ใช้ขนาดหน้าเดียวกัน
- ROW_FORMAT และ KEY_BLOCK_SIZE ไม่ใช่ส่วนของ CREATE INDEX สำหรับ InnoDB (ถูกละเว้น)
- อัลกอริทึมการบีบอัดไม่ได้รับผลกระทบจาก KEY_BLOCK_SIZE