Maison >base de données >tutoriel mysql >Comment supprimer efficacement les lignes en double dans une grande table SQLite sans clé primaire ?
Optimisation de la suppression des lignes en double dans la base de données SQLite
Question :
En rencontrant une table massive avec plus de 36 millions de lignes dans SQLite3, vous êtes confronté le défi de supprimer les enregistrements en double sur la base de deux colonnes (hash et d). Cependant, il y a un hic : aucune colonne de clé primaire n'existe dans la table. À la recherche d'une solution efficace, vous vous renseignez sur l'approche la plus efficace pour aborder cette tâche.
Réponse :
Pour éliminer efficacement les lignes en double en l'absence de clé primaire, un identifiant unique est nécessaire pour chaque enregistrement.
Solution :
Exploitez la colonne rowid spéciale de SQLite3 comme identifiant unique. La colonne rowid est un entier qui s'incrémente automatiquement pour chaque nouvelle ligne ajoutée à la table. En utilisant rowid, vous pouvez conserver l'enregistrement avec la valeur de rowid la plus basse pour chaque combinaison (hash, d).
Requête SQL :
Implémentez la requête SQL suivante pour atteindre votre objectif :
DELETE FROM YourTable WHERE rowid NOT IN ( SELECT MIN(rowid) FROM YourTable GROUP BY hash, d )
Cette requête identifie et élimine toutes les lignes contenant des combinaisons en double (hachage, d), garantissant qu'une seule instance de chaque combinaison reste dans le tableau. La sous-requête MIN(rowid) garantit que pour les enregistrements en double, l'enregistrement avec la valeur rowid la plus basse est conservé.
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!