ปัญหา "repair with keycache" เกิดขึ้นตอนเพิ่ม Index บนตารางใหญ่ ใช้วิธีสร้างตารางใหม่แล้วค่อยเพิ่ม Index
วิธีแก้
CREATE TABLE new_table AS (SELECT * FROM old_table);
ALTER TABLE new_table ADD INDEX (column_name);
ตัวอย่าง
mysql> CREATE TABLE DemoTable (
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentFirstName VARCHAR(20),
StudentLastName VARCHAR(20)
);
mysql> INSERT INTO DemoTable(StudentFirstName, StudentLastName) VALUES
('John', 'Doe'), ('David', 'Miller');
ขั้นตอนที่ 1: สร้างตารางใหม่จากตารางเดิม
mysql> CREATE TABLE DemoTable_new AS (SELECT * FROM DemoTable);
Query OK, 2 rows affected (0.34 sec)
ขั้นตอนที่ 2: เพิ่ม Index บนตารางใหม่
mysql> ALTER TABLE DemoTable_new ADD INDEX (StudentFirstName);
Query OK, 2 rows affected (0.57 sec)
เหตุผล: การสร้างตารางใหม่พร้อมโหลดข้อมูล แล้วค่อยสร้าง Index เร็วกว่าและหลีกเลี่ยง keycache repair เพราะไม่ต้อง rebuild index บนตารางที่มีข้อมูลอยู่แล้ว
หมายเหตุ: หลังเสร็จสิ้น ให้ RENAME TABLE ตารางเก่า แล้ว RENAME ตารางใหม่แทน