Bonsoir,
j'aurai une petite question sur une requête:
Je dois réaliser la purge d'une base de donnée selon des critères de date d'archivage et de statut.
J'ai une table OPERATION (id_operation) et plusieurs tables filles
PAIEMENT (id_paiment, id_operation)
MOUVEMENT (id_mouvement, id_paiement)
etc...
Donc lors de ma purge, je dois supprimer des données de la table
MOUVEMENT puis PAIEMENT puis OPERATIONS pour respecter les contraintes d'intégrités.
Donc je suis entrain de réfléchir sur la manière de m'y prendre
A votre avis,
est-ce que cette requête vous semble optimale ?
Il y a une autre solution à laquelle je réfléchi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 delete from MOUVEMENT where id_paiement in (select id_paiement from PAIEMENT where id_operation in (select id_operation from OPERATION where datearchivage=<date> and statut=<statut>) );
Lorsque de mon processus de purge, je dois récupérer toutes les opérations à archiver et stocker les id_operations dans une table (OPERATION_SESSION) en associant à chaque id_operation récupéré, un id_session (qui correspond à une session de purge).
Donc une autre requête possible serait :
Je pense que la seconde est plus efficace vu que j'ai beaucoup moins d'enregistrement dans la table.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 delete from MOUVEMENT where id_paiement in (select id_paiement from PAIEMENT where id_operation in (select id_operation from OPERATION_SESSION);
A priori par jour, 5000 opérations sont générés à partir de l'application.
A votre avis laquelle est plus efficace ?
Et concernant plusieurs select dans un delete, on peut faire mieux pour optimiser ?
merci







Répondre avec citation
Partager