-
Mise à jour des tables
Bonjour,
j'ai deux tables : A et B. La table B est alimentée par la table A. Chaque jour je mets les données de la table A dans la table B. J'aurai deux possibilités :
1-comparer A et B et ajouter la différence de A par rapport à B dans B.
2-vider B et le remplire completement avec le contenu de A.
Lequel est plus rapide ?
Actuellement je n'ai pas beaucoup de données dans A donc mes tests ne sont pas significatifs. Mes en prod j'aurai des milliers de lignes que je ne peux pas créer actuellement.
D'avance merci.
-
Ça dépend de beaucoup de chose, le merge d'Oracle est assez sympathique pour faire ça, mais une combo truncate/insert en masse est assez efficace aussi.
La question c'est : as-tu (ou va tu avoir) des triggers, comment détectes-tu si deux enregistrements sont les mêmes (sur combien de colonnes fais-tu le test), vider la table aura-t-elle une influence sur les reste de la base (clé étrangère ?), etc...
Au final, si ce n'est que quelques milliers de lignes, tes traitements ne seront jamais bien long dans les deux cas.
-
et pourquoi pas des triggers sur les insert, update et delete ?
-
Truncate B reuse storage ;
insert /*+ append */ into B (select * from A);
Me semble imbatable du point de vue Perf. Je vois pas comment on pourrait faire plus vite. Un CTAS de B a partir de A paierait le cout des allocations des extends.
Evidemment si tu a 3 rows en plus par jour dans A et A a 50M rows...