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 :

Update de données


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 80
    Par défaut Update de données
    Bonjour

    J'ai deux tables avec plusieurs champs dont les champs suivants:

    table_A:
    numero_de_voie
    voie
    code

    table_B:
    numero_de_voie
    voie


    Les deux tables ont des champs en communs: numero_de_voie et voie.

    Je souhaiterai remplir un champ voie dans la table B avec les valeurs de la table A.

    Etant donné que j'ai plus d'un million de ligne, si je saisie le code suivant, celà me prend
    beaucoup trop de temps de traitement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE table_B
    SET table_B.code=table_A.code
    WHERE table_A.numero_de_voie=table_B.numero_de_voie
    AND table_A.voie=table_B.voie
    Comment faire pour faire ce traitement le plus rapidement possible?

    D'avance merci pour votre aide.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 77
    Par défaut
    Essayes en rajoutant un index sur table_A qui contient les 3 colonnes dont tu as besoin (code, numero_de_voie et voie). A première vue, je mettrais "code" comme dernier champ de l'indexe.

    N'oublies pas les stats sur la table_A

  3. #3
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Première question : Le code posé ne marche pas sous sql : Table_A n'est pas dans la liste des tables.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE table_B
    SET table_B.code=table_A.code
    WHERE table_A.numero_de_voie=table_B.numero_de_voie
    AND table_A.voie=table_B.voie
    Seconde question : Est ce que c'est un update une seule fois ou un truc récurrent ?

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 80
    Par défaut
    Réponse 1 oui je l'ai juste tapé en exemple pour le simplifier

    Réponse 2, c'est un update que je dois faire 1 fois par an

  5. #5
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Citation Envoyé par dragon74 Voir le message
    Essayes en rajoutant un index sur table_A qui contient les 3 colonnes dont tu as besoin (code, numero_de_voie et voie). A première vue, je mettrais "code" comme dernier champ de l'indexe.

    N'oublies pas les stats sur la table_A
    l'indexation sur le champ 'code' ne sert à rien car non utilisé par le where et donc l'index ne sera surement pas utilisé !
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  6. #6
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par vicenzo Voir le message
    l'indexation sur le champ 'code' ne sert à rien car non utilisé par le where et donc l'index ne sera surement pas utilisé !
    Faux, il n'est pas obligatoire d'avoir tous champs de l'index dans la clause where.

    Ensuite avoir le code dans l'index peut permettre à Oracle de ne lire que l'index et pas la table pour récupérer le code

  7. #7
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Citation Envoyé par McM Voir le message
    Faux, il n'est pas obligatoire d'avoir tous champs de l'index dans la clause where.

    Ensuite avoir le code dans l'index peut permettre à Oracle de ne lire que l'index et pas la table pour récupérer le code
    sauf que l'ordre des colonnes de l'index dans ce cas est important et que si code est le premier champs de l'index, ca va pas super aider le where....

    De plus, j'ai déja eu des index non utilisés car sur plus de champs que les critère de where...
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 77
    Par défaut
    Je suis d'accord que l'ordre est important, c'est pour cela que j'ai dis de le mettre en dernier dans mon premier post. Mon idée étant de ne faire qu'un scan de l'indexe et pas de la table. Pour cela, il me faut les champs de la where clause et le champ "code".

    Ca ne t'assure pas qu'il ne va pas faire de table scan mais c'est à essayer

Discussions similaires

  1. [MySQL] updater une donnée
    Par sfc2000 dans le forum PHP & Base de données
    Réponses: 30
    Dernier message: 14/08/2008, 14h08
  2. Requête UPDATE ne donne aucun résultat
    Par Mike619 dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 11/03/2008, 10h18
  3. updater des données dans mon fichier excel
    Par gantec dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 26/02/2007, 16h01
  4. update des données
    Par LesLemmings dans le forum Visual C++
    Réponses: 2
    Dernier message: 30/11/2006, 09h26
  5. [MySQL] Ca fonctionne presque, mais l'UPDATE ne donne rien
    Par guillaumeIOB dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/05/2006, 00h26

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