시나리오: MySQL 테이블의 중복 행은 데이터 입력 오류를 비롯한 다양한 소스에서 발생할 수 있습니다. 이러한 중복 항목을 제거하는 것은 데이터 무결성과 최적의 데이터베이스 성능을 유지하는 데 필수적입니다.
문제: 각 중복 행의 인스턴스를 하나만 남기고 모두 삭제하는 것이 문제입니다.
해결책 및 주의사항:
중요 사항: DELETE 쿼리를 실행하기 전에 항상 테이블을 백업하세요. DELETE 문을 잘못 구현하면 되돌릴 수 없는 데이터 손실이 발생할 수 있습니다.
방법 1: ID가 가장 낮은 행 보존
이 접근 방식은 ID 값이 가장 작은 행을 유지합니다.
<code class="language-sql">DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name;</code>
방법 2: ID가 가장 높은 행 보존
이 대안은 행이 가장 큰 ID 값을 유지하도록 유지합니다.
<code class="language-sql">DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name;</code>
대형 테이블의 효율성 향상:
매우 큰 테이블의 경우 다음 INSERT ... SELECT DISTINCT
방법이 더 효율적인 솔루션을 제공합니다.
<code class="language-sql">CREATE TEMPORARY TABLE tempTableName AS SELECT DISTINCT cellId, attributeId, entityRowId, value FROM tableName; TRUNCATE TABLE tableName; INSERT INTO tableName SELECT * FROM tempTableName; DROP TEMPORARY TABLE tempTableName;</code>
이렇게 하면 고유한 행만 포함된 임시 테이블이 생성되고 원본 테이블이 잘린 다음 임시 테이블의 고유 데이터로 채워집니다. 이는 일반적으로 대규모 데이터 세트에 DELETE
를 사용하는 것보다 빠릅니다. tableName
, cellId
, attributeId
, entityRowId
및 value
을 실제 열 이름으로 바꿔야 합니다.
위 내용은 단일 인스턴스를 유지하면서 MySQL 테이블에서 중복 행을 효율적으로 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!