ฉันพบว่ามีประโยชน์ในการเพิ่มดัชนี unqiue โดยใช้ "ALTER IGNORE" ซึ่งจะลบรายการที่ซ้ำกันและบังคับใช้บันทึกที่ไม่ซ้ำกันซึ่งดูเหมือนคุณต้องการจะทำ ดังนั้นไวยากรณ์จะเป็น:
ALTER IGNORE TABLE `table` ADD UNIQUE INDEX(`id`, `another_id`, `one_more_id`);
สิ่งนี้ช่วยเพิ่มข้อ จำกัด ที่เป็นเอกลักษณ์ได้อย่างมีประสิทธิภาพซึ่งหมายความว่าคุณจะไม่มีระเบียนที่ซ้ำกันและ IGNORE จะลบรายการที่ซ้ำกันที่มีอยู่
คุณสามารถอ่านเพิ่มเติมเกี่ยวกับ eh ALTER IGNORE ได้ที่นี่: http://mediakey.dk/~cc/mysql-remove-duplicate-entries/
อัปเดต: ฉันได้รับแจ้งจาก @Inquisitive ว่าสิ่งนี้อาจล้มเหลวในเวอร์ชันของ MySql> 5.5:
มันล้มเหลวใน MySQL> 5.5 และบนโต๊ะ InnoDB และใน Percona เนื่องจากคุณสมบัติการสร้างดัชนีรวดเร็ว InnoDB ของพวกเขา [ http://bugs.mysql.com/bug.php?id=40344] ในกรณีนี้ให้รันก่อนset session old_alter_table=1
จากนั้นคำสั่งดังกล่าวจะทำงานได้ดี
อัปเดต - ALTER IGNORE
ลบออกใน 5.7
จากเอกสาร
สำหรับ MySQL 5.6.17 ประโยค IGNORE จะเลิกใช้งานและการใช้งานจะสร้างคำเตือน IGNORE ถูกลบออกใน MySQL 5.7
หนึ่งใน MySQL dev ของให้ สองทางเลือก :
- จัดกลุ่มตามช่องที่ไม่ซ้ำกันและลบตามที่เห็นด้านบน
- สร้างตารางใหม่เพิ่มดัชนีเฉพาะใช้
INSERT IGNORE
เช่น:
CREATE TABLE duplicate_row_table LIKE regular_row_table;
ALTER TABLE duplicate_row_table ADD UNIQUE INDEX (id, another_id);
INSERT IGNORE INTO duplicate_row_table SELECT * FROM regular_row_table;
DROP TABLE regular_row_table;
RENAME TABLE duplicate_row_table TO regular_row_table;
แต่ขึ้นอยู่กับขนาดของโต๊ะของคุณสิ่งนี้อาจไม่สามารถใช้งานได้จริง