Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1431 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  supprimer des enregistrements d'une table dont des champs sont dans un

 

Sujet(s) à lire :
 

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

supprimer des enregistrements d'une table dont des champs sont dans un

n°2230212
maestro130​3
Posté le 08-06-2014 à 18:08:35  profilanswer
 

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

mood
Publicité
Posté le 08-06-2014 à 18:08:35  profilanswer
 

n°2230224
Yonel
Monde de merde !
Posté le 09-06-2014 à 08:05:51  profilanswer
 

Vu le faible nombre d'enregistrements, un simple DELETE avec un INNER JOIN devrait être assez rapide
 

Code :
  1. DELETE  table2Records
  2. FROM T2 table2Records INNER JOIN T1
  3.  ON t1.col1 = table2Records.col1 AND t1.col2 = table2Records.col2 AND t1.col3 = table2Records.col3 AND t1.col4 = table2Records.col4


 
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.

Message cité 1 fois
Message édité par Yonel le 09-06-2014 à 08:06:51
n°2230225
gpl73
Posté le 09-06-2014 à 08:31:30  profilanswer
 

Yonel a écrit :

Vu le faible nombre d'enregistrements, un simple DELETE avec un INNER JOIN devrait être assez rapide
 

Code :
  1. DELETE  table2Records
  2. FROM T2 table2Records INNER JOIN T1
  3.  ON t1.col1 = table2Records.col1 AND t1.col2 = table2Records.col2 AND t1.col3 = table2Records.col3 AND t1.col4 = table2Records.col4


 
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.


 
Tu utilises quoi comme DB ou SQL, Maestro1303 ?
J'ai toujours revé :D  de faire des delete comme ça mais ça n'a jamais marché. :fou:  
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


---------------
mieux vaut être un con au chaud, qu'un con gelé lol
n°2230226
Yonel
Monde de merde !
Posté le 09-06-2014 à 08:38:00  profilanswer
 

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.


Message édité par Yonel le 09-06-2014 à 08:38:27
n°2230227
Yonel
Monde de merde !
Posté le 09-06-2014 à 08:45:34  profilanswer
 

Sinon tu as cette méthode qui devrait pas poser de problèmes de vitesse non plus :
 

Code :
  1. Delete from <table2>
  2. where exists ( select * from <table1> where <joining condition> )

n°2230483
maestro130​3
Posté le 12-06-2014 à 01:07:06  profilanswer
 

Merci infiniment,
 
Grace à la contribution de tous j'y suis arrivé.
 
Merci beacoup


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  supprimer des enregistrements d'une table dont des champs sont dans un

 

Sujets relatifs
Eviter les doublons dans une tableMoyen le plus rapide de copier une grosse table SQL en mémoire ?
Executer un script si nouvelle ligne dans une table MySQLcheckbox dont les case à cocher sont remplis par des champs d'une tabl
presence raccourci bureau et le supprimer vbs scriptproblème pour inserer des données dans une table à partir d'un Jframe
mofier et supprimer un en enrgistrement dans sql server 2008calcul de champs
supprimer cote dans un fichierCouper des champs particuliers du fichier texte
Plus de sujets relatifs à : supprimer des enregistrements d'une table dont des champs sont dans un


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR