Je recherche la meilleure solution (performance sage) pour y parvenir.Oracle: Insertion sur une table indexée, évitant les doublons. Vous cherchez des conseils et des conseils
Je dois insérer des enregistrements dans une table, en évitant les doublons.
Par exemple, prenez le tableau A
Insert into A (
Select DISTINCT [FIELDS] from B,C,D..
WHERE (JOIN CONDITIONS ON B,C,D..)
AND
NOT EXISTS
(
SELECT * FROM A ATMP WHERE
ATMP.SOMEKEY = A.SOMEKEY
)
);
J'ai un index de A.SOMEKEY, pour optimiser le PAS EXISTE requête, mais je me rends compte que l'insertion sur une table indexée sera une baisse de performance. Je pensais donc à dupliquer le tableau A dans une table temporaire globale, où je conserverais l'index. Ensuite, en supprimant l'indice du tableau A et l'exécution de la requête, mais modifié
Insert into A (
Select DISTINCT [FIELDS] from B,C,D..
WHERE (JOIN CONDITIONS ON B,C,D..)
AND
NOT EXISTS
(
SELECT * FROM GLOBAL_TEMPORARY_TABLE_A ATMP WHERE
ATMP.SOMEKEY = A.SOMEKEY
)
);
Cela résoudrait le « insertion sur une table d'index », mais je dois mettre à jour le Global Temporaire A avec chaque insertion que je fais.
Je suis un peu perdu ici,
est-il une meilleure façon d'y parvenir?
Merci à l'avance,
Est-ce une chose une seule fois? Avez-vous prouvé que le coup que vous prenez en laissant l'index en place est assez mauvais pour justifier un travail? – Kuberchaun
Quelle version d'Oracle exécutez-vous? – Kuberchaun
@ StarShip3000: Non, c'est un processus nocturne. Je crois que la version oracle est 11g. – Tom