비효율적 인 쿼리를 실행하면 매우 큰 테이블 (이 테이블의 10 억 개가 넘는 행)에서 중복 된 행을 삭제하는 가장 효과적인 방법을 알 필요가 있습니다.이 작업을 수행하는 데 매우 효율적인 방법을 알 필요가 있습니다. . 내가 검색 테이블의 모든 중복 URL을 삭제해야 MySQL 큰 테이블에서 중복 행을 어떻게 삭제합니까?
,즉
DELETE FROM search WHERE (url) NOT IN
(
SELECT url FROM
(
SELECT url FROM search GROUP BY url
) X
);
** 관련 ** 질문에있는 답변과 다른 답변을 얻지 못할 것으로 생각됩니다. – Barmar
현재 테스트 테이블에서이 응답을 테스트하는 데 걸리는 시간은 얼마입니까? – mahen3d
@ mahen3d : 제안하는 쿼리는 테이블의 모든 행을 삭제합니다 ('url'이있는 행이없는 경우) 값이 NULL 인 경우) 또는 행을 삭제하지 않습니다 (NULL 값이 'url'인 행이있는 경우). 매우 큰 테이블의 경우 전체 시간뿐만 아니라 완료해야 할 작업량 (InnoDB의 잠금, 로깅 및 롤백). 행의 비율이 매우 큰 경우 새 테이블을 만들고 유지하려는 기존 테이블의 행만 복사하는 것이 좋습니다. 외래 키를 다시 만들어야하는 경우에도 대개 더 빠릅니다. – spencer7593