Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
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 20/07/2011, 09h23   #1
Membre actif
 
Inscription : mai 2004
Messages : 725
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 725
Points : 193
Points : 193
Par défaut Comment optimiser une requete Update SQL ?

Bonjour,

J'ai créé une requete SQL d'update. Le probleme c'est que ma requete n'est pas efficace au niveau performance. On doit faire une update sur 70 000 lignes et une ligne prend 10 secondes pour etre updater.

Comment améliorer la requete SQL suivante :

Voici le nombre de lignes pour chaque tables :

La table document a 648 244 lignes
La table radiologie a 485 301 lignes
La table data_temp a 70 366 lignes


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
 
 
UPDATE document doc
   SET (doc.nda,doc.noip) = (SELECT sda.nda,sda.nip_actif
                    FROM DATA_TEMP sda
                         INNER JOIN radiologie rad
                           ON CONCAT(rad.ID_DEMANDE, rad.ID_EXAMEN) = sda.s_aphp_reference_acte_rados
                   WHERE rad.id_document_lie = doc.id_document)
 WHERE EXISTS (SELECT NULL
                 FROM DATA_TEMP sda
                      INNER JOIN radiologie rad
                        ON CONCAT(rad.ID_DEMANDE, rad.ID_EXAMEN) = sda.s_aphp_reference_acte_rados
                WHERE rad.id_document_lie = doc.id_document);
Merci
Battosaiii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 09h32   #2
Membre confirmé
 
Homme Grégoire MARTIN
Ingénieur développement logiciels
Inscription : janvier 2011
Messages : 128
Détails du profil
Informations personnelles :
Nom : Homme Grégoire MARTIN
Âge : 32
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : janvier 2011
Messages : 128
Points : 225
Points : 225
Bonjour,

Des indexes ? Stats ? et Explain Plan si possible ?
ORA-007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 10h54   #3
Membre Expert
 
Inscription : août 2009
Messages : 779
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 779
Points : 1 098
Points : 1 098
Un merge into devrait déjà être plus performant, ça éviterait de refaire des jointures sur une concaténation.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
MERGE INTO document doc
USING 
 (SELECT sda.nda,sda.nip_actif, rad.id_document_lie
                    FROM DATA_TEMP sda
                         INNER JOIN radiologie rad
                           ON CONCAT(rad.ID_DEMANDE, rad.ID_EXAMEN) = sda.s_aphp_reference_acte_rados
                   ) t
ON (t.id_document_lie = doc.id_document)
 
WHEN MATCHED THEN
         UPDATE SET doc.nda = t.nda
                          ,doc.noip = t.id_document_lie
Rei Ichido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 13h51   #4
Membre actif
 
Inscription : mai 2004
Messages : 725
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 725
Points : 193
Points : 193
Merci pour vos réponses.

J'ai choisi de prendre une solution PL SQL avec un curseur.
Battosaiii est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h35.


 
 
 
 
Partenaires

Hébergement Web