J'ai un processus qui consolide 40+ bases de données à structure identique en une base de données consolidée, la seule différence étant que la base de données consolidée ajoute un champ project_id à chaque table.Obtention de différences d'enregistrement entre 2 tables presque identiques
Afin d'être aussi efficace que possible, j'essaie de ne copier/mettre à jour un enregistrement des bases de données sources vers la base de données consolidée que si elle a été ajoutée/modifiée. Je supprime les enregistrements périmés de la base de données consolidée, puis copie dans des enregistrements inexistants. Pour supprimer obsolètes/enregistrements modifiés J'utilise une requête similaire à ceci:
DELETE FROM <table>
WHERE NOT EXISTS (SELECT <primary keys>
FROM <source> b
WHERE ((<b.fields = a.fields>) or
(b.fields is null and a.fields is null)))
AND PROJECT_ID = <project_id>
Cela fonctionne pour la plupart, mais l'une des tables de la base de données source a plus de 700 000 dossiers, et cette requête prend plus d'une heure à compléter.
Comment rendre cette requête plus efficace?
Avez-vous un index sur * champs *? –