我发现使用“ ALTER IGNORE”添加unueue索引会有所帮助,该索引会删除重复项并强制执行唯一的记录,这听起来像是您想做的。因此语法为:
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开发人员之一提供了两种选择:
- 按唯一字段分组并删除,如上所示
- 创建一个新表,添加唯一索引,使用
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;
但是根据您的桌子的大小,这可能不切实际