Maison >base de données >tutoriel mysql >Comment supprimer efficacement les lignes en double dans Netezza sans identifiant unique ?
Élimination des lignes en double dans Netezza sans clés uniques
Les données en double dans les grandes tables ont un impact sur le stockage et la qualité des données. Supprimer ces doublons sans identifiant unique présente un défi. Bien que des techniques telles que l'utilisation de numéros de ligne (courantes dans le SQL standard) ne soient pas directement applicables dans Netezza, il existe une alternative très efficace.
L'approche Netezza : tirer parti de la commande DELETE
Netezza propose une solution puissante en utilisant le mot-clé USING
dans l'instruction DELETE
. Prenons cet exemple :
<code class="language-sql">DELETE FROM table_with_dups T1 USING table_with_dups T2 WHERE T1.ctid < T2.ctid AND T1.column1 = T2.column1 AND T1.column2 = T2.column2 -- ... add more columns as needed ...</code>
Cette requête compare chaque ligne (T1) à toutes les autres lignes (T2) de table_with_dups
. Il identifie et supprime les anciennes lignes en double en fonction de leurs valeurs ctid
(ID de ligne). Les conditions AND
garantissent que seules les lignes avec des valeurs identiques dans les colonnes spécifiées sont considérées comme des doublons.
Prévisualisation avant suppression
Pour consulter les lignes dont la suppression est prévue avant d'exécuter la commande DELETE
, remplacez DELETE
par SELECT *
et le mot-clé USING
par une virgule :
<code class="language-sql">SELECT * FROM table_with_dups T1, table_with_dups T2 WHERE T1.ctid < T2.ctid AND T1.column1 = T2.column1 AND T1.column2 = T2.column2 -- ... add more columns as needed ...</code>
Optimisation des performances
Pour des performances optimales, évitez les clauses NOT IN
, qui peuvent ralentir considérablement le processus en raison de la surcharge des sous-requêtes. La méthode USING
démontrée ici offre une vitesse supérieure dans la plupart des scénarios.
Gestion des valeurs NULL
Si des colonnes clés contiennent des valeurs NULL
, utilisez la fonction COALESCE()
dans la clause WHERE
pour garantir une comparaison précise :
<code class="language-sql"> AND COALESCE(T1.col_with_nulls, '[NULL]') = COALESCE(T2.col_with_nulls, '[NULL]') ``` This treats `NULL` values consistently. Replace `col_with_nulls` with the actual column name. Remember to adjust the column list in the `WHERE` clause to include all relevant columns for duplicate identification.</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!