Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/10/2011, 15h38   #1
Membre du Club
 
Inscription : mars 2005
Messages : 277
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 277
Points : 42
Points : 42
Par défaut Problème d'update sur une table

Salut,

Je suis sous oracle 10,
je dois alimenter une table Target T à partir d'une table source S.
Ma table target T contient actuellement
26 452 142 lignes.

La table source, contient des lignes existantes dans la target T
mais aussi des nouvelles lignes.

Donc afin de savoir si je dois faire un insert ou update,
je compte faire une jointure externe entre la table S et la table T.
Si la clé existe dans S et non dans T c'est un insert sinon Update.

Par contre, les update,appramment c'est très long,
je peu avoir à mettre à jour 20 lignes comme 100 000 de lignes.
Pourquoi est-ce aussi long ?pourrait t on m expliquer ?
et comment peut-on optimiser cela ?

Merci à tous
Melvine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2011, 16h32   #2
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 311
Points : 5 813
Points : 5 813
Utilisez Merge.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 29/02/2012, 14h49   #3
Membre confirmé
 
Inscription : février 2012
Messages : 203
Détails du profil
Informations forums :
Inscription : février 2012
Messages : 203
Points : 267
Points : 267
Le merge fonctionnant en ROW BY ROW, ce n'est pas la plus efficace

Un INSERT et un UPDATE "ciblés" devraient faire l'affaire

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
INSERT INTO ma_table
  (Champs1, champs2,..)
  (SELECT Ch1, ch2
  FROM ma_table2
  WHERE NOT EXISTS
     (SELECT 1 
     FROM ChPK = ChampsPK)
   );
 
UPDATE ma_table
SET  (Champs1, Champs2...) = 
    (SELECT Ch1, Ch2...
     FROM ma_table2
     WHERE ChPK = ChampsPK)
WHERE EXISTS
   (SELECT 1 
   FROM ChPK = ChampsPK)
Scriuiw est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 29/02/2012, 14h59   #4
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Citation:
Envoyé par Scriuiw Voir le message
Le merge fonctionnant en ROW BY ROW
Non, MERGE est ensembliste.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/02/2012, 16h54   #5
Membre confirmé
 
Inscription : février 2012
Messages : 203
Détails du profil
Informations forums :
Inscription : février 2012
Messages : 203
Points : 267
Points : 267
On m'aurait menti !
Scriuiw est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h46.


 
 
 
 
Partenaires

Hébergement Web