supprimer des enregistrements d'une table dont des champs sont dans un - SQL/NoSQL - Programmation
Marsh Posté le 09-06-2014 à 08:05:51
Vu le faible nombre d'enregistrements, un simple DELETE avec un INNER JOIN devrait être assez rapide
Code :
|
Si jamais c'est toujours pas assez rapide, voici 2 pistes :
1) Créer le(s) index(es) qui vont bien sur les colonnes col1/col2/col3/col4 pour optimiser le plan d'exécution utilisé lors du INNER JOIN
2) Découper ta table en partitions suivant les valeurs des colonnes. Au lieu d'effectuer un DELETE, tu pourrais alors faire un TRUNCATE sur la partition qui va bien et ce sera instantané.
Je pense pas que tu aies besoin d'aller aussi loin que le point 2) ceci dit vu ton nombre d'enregistrements faible.
Marsh Posté le 09-06-2014 à 08:31:30
Yonel a écrit : Vu le faible nombre d'enregistrements, un simple DELETE avec un INNER JOIN devrait être assez rapide
|
Tu utilises quoi comme DB ou SQL, Maestro1303 ?
J'ai toujours revé de faire des delete comme ça mais ça n'a jamais marché.
Mon SQL ou mon DB (je suis sur AS400), ne veut pas ...
Je suis à chaque fois obligé de passer par le delete classique (décrits x et x fois sur les forums, maestro, tu l'as même ici sur ce forum)...
Delete from Table1 as a where (a.c1, a.c2, ...,a.cn) in (select b.c1, b.c2....,b.cn from Table 2 as b)
C'est quoi, un découpage en partition?
Guillaume
Marsh Posté le 09-06-2014 à 08:38:00
Ah bizarre, je pensais que ce genre de DELETE avec INNER JOIN était standard. En tout cas sous SQL Server ou Oracle ça pose pas de problème.
Le découpage en partition de ta table ça permet de découper tes données en fonction par exemple d'une colonne.
Ensuite tu peux utiliser ce genre de commandes :
ALTER TABLE table_name TRUNCATE PARTITION partition_name [{DROP|REUSE} STORAGE]
Hyper puissant puisqu'à ce moment là ta suppression de données est instantanée quel que soit ton nombre d'enregistrements. Par contre faire gaffe puisque pas de ROLLBACK possible et ça nécessite de recalculer les statistiques sur tes INDEX.
Marsh Posté le 09-06-2014 à 08:45:34
Sinon tu as cette méthode qui devrait pas poser de problèmes de vitesse non plus :
Code :
|
Marsh Posté le 12-06-2014 à 01:07:06
Merci infiniment,
Grace à la contribution de tous j'y suis arrivé.
Merci beacoup
Marsh Posté le 08-06-2014 à 18:08:35
Bonjour j'ai deux tables T1 et T2 avec une clé primaire commune Clef
T1(col0, col1,clef,col2,col3,col4) et une table t2(col1,clef,col2,col3,col4,col5)
et je veux supprimer tous les enregistrements de T2 ayant (col1,col2,col3,col4) qui ont un représentant(col1,col2,col3,col4) dans T1
Comment peut-on y arriver sans mettre beaucoup de temps (j'ai 1.800 enregistrements dans T1 et 11.000 enregistrements dans T2)
Merci infiniment