중복을 제거하고 원하는 것처럼 들리는 고유 한 레코드를 적용하는 "ALTER IGNORE"를 사용하여 unqiue 인덱스를 추가하는 것이 도움이된다는 것을 알았습니다. 따라서 구문은 다음과 같습니다.
ALTER IGNORE TABLE `table` ADD UNIQUE INDEX(`id`, `another_id`, `one_more_id`);
이것은 고유 한 제약 조건을 효과적으로 추가하여 중복 레코드를 가지지 않으며 IGNORE는 기존 중복을 삭제합니다.
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;
그러나 테이블의 크기에 따라 실용적이지 않을 수 있습니다.