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

Oracle Discussion :

optimisation requête SQL


Sujet :

Oracle

  1. #1
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 175
    Points : 59
    Points
    59
    Par défaut optimisation requête SQL
    Bonjour,

    Je suis confronté à un problème d'optimisation pour une requête SQL.

    Au sein d'une application interactive, je lance un ensemble de requêtes mettant à jour une table Oracle comportant environ 70000 libellés. Le temps de réponse est 2 sec. J'augmente la taille de la table jusqu'à 350000 libellés et le temps de réponse passe à 25 secondes. Comment se fait-il que les temps de réponse se dégradent ainsi très fortement? ( j'ai créé un index sur la table en question ), quels sont les moyens à disposition pour réduire le temp d'accés à la table ?

    Merci d'avance

  2. #2
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Elle est comment la requête ? Est-ce qu'il y a une jointure ? Est-ce que c'est juste un count ou est-ce que tu ramènes des données. Est-ce que tu peux nous donner le plan d'exécution ?
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  3. #3
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 175
    Points : 59
    Points
    59
    Par défaut
    Voici un exemple de plan d'execution pour une de mes requêtes( avec ou sans index ) :

    ------- AVEC INDEX -----------
    SQL> update /*+ INDEX(valva, valva_pk) */ valva set valva_sor = 'sdqdq' where upper(idt_valva_enq) =
    'PRHTEST' and upper(idt_valva_lot) = 'PCS1' and idt_valva_gpur = 0 and idt_valva_ur = 2 and idt_val
    va_lib = 1 and idt_valva_va = 12 ;
    1 ligne mise à jour.
    Ecoulé : 00 :00 :01.09
    Execution Plan
    ----------------------------------------------------------
    0 UPDATE STATEMENT Optimizer=CHOOSE (Cost=27 Card=1 Bytes=69)
    1 0 UPDATE OF 'VALVA'
    2 1 INDEX (FULL SCAN) OF 'VALVA_PK' (UNIQUE) (Cost=26 Card=1
    Bytes=69)


    Statistics
    ----------------------------------------------------------
    0 recursive calls
    2 db block gets
    1684 consistent gets
    1684 physical reads
    388 redo size
    868 bytes sent via SQL*Net to client
    765 bytes received via SQL*Net from client
    3 SQL*Net roundtrips to/from client
    1 sorts (memory)
    0 sorts (disk)
    1 rows processed
    ------ SANS INDEX ---------

    SQL> update valva set valva_sor = 'sdqdq' where upper(idt_valva_enq) = 'PRHTEST' and upper(idt_valva
    _lot) = 'PCS1' and idt_valva_gpur = 0 and idt_valva_ur = 2 and idt_valva_lib = 1 and idt_valva_va =
    12 ;
    1 ligne mise à jour.
    Ecoulé : 00 :00 :01.06
    Execution Plan
    ----------------------------------------------------------
    0 UPDATE STATEMENT Optimizer=CHOOSE
    1 0 UPDATE OF 'VALVA'
    2 1 TABLE ACCESS (FULL) OF 'VALVA'


    Statistics
    ----------------------------------------------------------
    0 recursive calls
    2 db block gets
    5064 consistent gets
    5055 physical reads
    388 redo size
    868 bytes sent via SQL*Net to client
    735 bytes received via SQL*Net from client
    3 SQL*Net roundtrips to/from client
    1 sorts (memory)
    0 sorts (disk)
    1 rows processed

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut


    merci

  5. #5
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Points : 277
    Points
    277
    Par défaut
    Tu as des UPPER sur tes colonnes dans la partie gauche de tes clauses WHERE...

    A moins que tu ais créé des Index de fonction cela invalide tes INDEX...
    même si tu spécifie que tu les utilise (via le HINT) ils ne te servent à rien...

    Enlève les UPPER ou créee des INDEX sur la valeur UPPERisée de tes colonnes.
    Dyvim

Discussions similaires

  1. Optimisation requête SQL 2
    Par ludo00002 dans le forum SQL
    Réponses: 13
    Dernier message: 10/10/2008, 12h29
  2. Optimisation requête SQL
    Par ludo00002 dans le forum SQL
    Réponses: 2
    Dernier message: 06/10/2008, 09h01
  3. Comment optimiser requête SQL avec création Index
    Par schumi101 dans le forum SQL
    Réponses: 25
    Dernier message: 11/12/2007, 21h28
  4. Besoin d'aide pour optimiser requête SQL
    Par Keuf95 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 06/09/2005, 16h02
  5. optimisation requête SQL!!! help!!
    Par anathem62 dans le forum Requêtes
    Réponses: 2
    Dernier message: 24/05/2004, 16h26

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