IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Optimisation d'une requete UPDATE table volumineuse


Sujet :

SQL Oracle

  1. #1
    Membre habitué Avatar de hammag
    Profil pro
    Inscrit en
    Février 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 511
    Points : 145
    Points
    145
    Par défaut Optimisation d'une requete UPDATE table volumineuse
    Bonjour,

    Je cherche à optimiser la requête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    UPDATE PLN_IND_DET A 
    SET (A.DEMANDE) = ( SELECT SUM(B.ACTUALDEMAND) 
    						   FROM FCITEMDATA B 
    						   WHERE B.CONFIG='PDP' 
    						   AND B.ITEM=A.ITEM 
    						   AND B.YEAR=A.YEAR 
    						   AND B.PERIOD=A.MONTH
    						  ) 
    WHERE A.NAME = 'TOT_PDP' 
    AND A.DATE = TO_DATE('2011-11-24','YYYY-MM-DD')
    Le but est de mettre à jour le champ DEMANDE dans la table PLN_IND_DET avec la somme du champ ACTUALDEMAND dans la table FCITEMDATA pour les lignes équivalentes (chaque ligne dans la 1ère table a au moins un ou plusieurs lignes équivalentes dans la deuxièmes table).

    Les clés de la table PLN_IND_DET :
    - NAME
    - DATE
    - BU
    - ITEM
    - YEAR
    - MONTH
    + autres champs non clés.

    Les clés de la table FCITEMDATA
    - CONFIG
    - ITEM
    - YEAR
    - PERIOD
    - LEVEL
    + autres champs non clés.

    Les seuls champs qui me permettent de faire la jointure sont
    B.ITEM=A.ITEM
    AND B.YEAR=A.YEAR
    AND B.PERIOD=A.MONTH


    Les deux tables sont trop volumineuses et l’exécution dure des heures (pas moins de 300000 lignes à màj dans la 1ère table).

    y-a-t-il un moyen de modifier cette requête pour l’optimiser ?

    Merci d’avance

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 917
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 917
    Points : 51 693
    Points
    51 693
    Billets dans le blog
    6
    Par défaut
    une première remarque : une table ne peut avoir qu'une seule clef primaire
    Qu'entendez vous donc pas clef ?

    Ensuite commencez par respecter la charte de postage ici :
    http://www.developpez.net/forums/a69...gage-sql-lire/

    En indiquant notamment le SGBD utilisé et en, décrivant tables, contraintes et index sous forme SQL DDL

    A +

  3. #3
    Membre habitué Avatar de hammag
    Profil pro
    Inscrit en
    Février 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 511
    Points : 145
    Points
    145
    Par défaut
    Merci pour vos remarques, j'en prends note.
    Mais vous pouvez dire ça gentiment, un petit bonjour au début de ton message ou bien un cordialement à la fin ça ne fait de mal à personne

    Cordialement.

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Vous sur réagissez, il y a "A+" à la fin et le « ton » n’est pas agressive.
    Si votre SGBD est Oracle (10g) utilisez MERGE.

Discussions similaires

  1. Comment optimiser une requete Update SQL ?
    Par Battosaiii dans le forum SQL
    Réponses: 3
    Dernier message: 20/07/2011, 13h51
  2. [MySQL] relier plusieurs tables dans une requete "update" en mysql
    Par ainuod dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/06/2011, 19h45
  3. Optimisation d'une requete UPDATE
    Par Djibo dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/03/2010, 15h42
  4. Creer une requete update qui recupere les données de 2 tables
    Par pooi1 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 13/06/2007, 13h13
  5. Utilisation d'une requete dans une requete update
    Par hellbilly dans le forum Access
    Réponses: 4
    Dernier message: 09/01/2005, 15h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo