"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Puede un índice único eliminar duplicados en una tabla con duplicados existentes y cómo?

¿Puede un índice único eliminar duplicados en una tabla con duplicados existentes y cómo?

Publicado el 2024-11-08
Navegar:501

Can a Unique Index Remove Duplicates in a Table with Existing Duplicates, and How?

Eliminar duplicados con índice único

En un esfuerzo por evitar la inserción de datos duplicados, se creó por error un índice normal para los campos A, B, C y D, lo que da como resultado la presencia de registros duplicados en una tabla de 20 millones de registros. Surge la pregunta: ¿agregar un índice único para estos campos eliminará los duplicados sin comprometer los existentes?

Corrección del índice y manejo de duplicados

Agregar un índice único con el La instrucción ALTER TABLE sin el modificador IGNORE fallará porque ya existen registros únicos. Sin embargo, usar el modificador IGNORE eliminará los duplicados.

Enfoque alternativo para las versiones de MySQL 5.7.4 y superiores

Para las versiones de MySQL 5.7.4 y superiores, donde el El modificador IGNORE no es compatible; se recomienda un enfoque diferente:

  1. Copie los datos en un archivo temporal tabla.
  2. Trunca la tabla original.
  3. Crea el índice único.
  4. Copia los datos nuevamente a la tabla original usando INSERT IGNORE, descartando cualquier fila duplicada.

Sintaxis para eliminar duplicados con INSERT IGNORAR

CREATE TABLE tmp_data SELECT * FROM mytable;
TRUNCATE TABLE mytable;
ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);
INSERT IGNORE INTO mytable SELECT * FROM tmp_data;
DROP TABLE tmp_data;

Consideraciones adicionales

La documentación no especifica qué fila duplicada se conservará después de usar el modificador IGNORE. Es recomendable probar esto en un conjunto de datos más pequeño antes de aplicar la solución a una tabla grande.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3