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 :

Temps de réponse d'une requête en filtrant sur la clé de partition très longue


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 83
    Points : 56
    Points
    56
    Par défaut Temps de réponse d'une requête en filtrant sur la clé de partition très longue
    Bonjour à tous,

    Depuis plusieurs jours je galère suite à un temps d'exécution d'une requête vraiment très long. J'espère que je trouverai de l'aide parmis les tenor du SQL qui se trouvent sur ce forum.

    Mon problème est donc le suivant :


    La table TOTO est partitionnée sur le champ ID_TEC.
    La table LIST_ID contient la valeur du champ ID_TEC de la table TOTO.


    Lorsque j'exécute la requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select TOTO.* from TOTO where ID_TEC=1; --(valeur en dur sur la clé de partition).
    Le temps de response est instantané.


    Lorsque j'exécute la requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select TOTO.* from TOTO where ID_TEC in (select ID_TEC from LIST_ID where table_name ='TOTO'); --(valeur de la clé de partition récupérée depuis la table LIST_ID).
    Le temps de réponse de la requête et de plusieurs seconde.
    Les stats sont à jour sur la partition de la table TOTO et sur la table LIST_ID.

    Avez-vous déjà rencontrer ce problème ? Avez-vous une solution pour améliorer le temps de réponse de la requête ?

    Je vous remercie de votre lecture.

  2. #2
    Membre expérimenté Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Points : 1 597
    Points
    1 597
    Par défaut
    Bonjour,

    SELECT TOTO.* FROM TOTO WHERE ID_TEC=1 ; n'est équivalente à SELECT TOTO.* FROM TOTO WHERE ID_TEC IN (SELECT ID_TEC FROM LIST_ID WHERE table_name ='TOTO'); que sous certaines conditions.

    S'il n'y a pas d'équivalence logique entre table_name et id_tec, les deux requêtes sont différentes et présuppose que la sous requête SELECT ID_TEC FROM LIST_ID WHERE table_name ='TOTO' retourne de 0 à N lignes. Quelle cardinalité l'optimiseur estime-t-il pour cette sous requête ? Un petit 'explain plan' vous donnera la réponse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    explain plan for
    SELECT ID_TEC FROM LIST_ID WHERE table_name ='TOTO' ;
     
    select * from table(sys.dbms_xplan.display()) ;
    Un autre point à prendre en compte est le temps d'exécution de la sous requête elle même.
    Unitairement combien de temps dure SELECT ID_TEC FROM LIST_ID WHERE table_name ='TOTO', quel plan est utilisé ? Y-a-t-il un index sur table_name ?

Discussions similaires

  1. Amélioration du temps de réponse d'une requête
    Par Boubou2020 dans le forum Administration
    Réponses: 2
    Dernier message: 24/11/2014, 12h07
  2. [AC-97] Temps de réponse d'une requête lancée en réseau
    Par niko8181 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 05/10/2009, 17h56
  3. accélérer le temps de réponse d'une requête
    Par cool dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 23/01/2008, 12h34
  4. Comment optimiser les temps de réponse d'une requête ?
    Par renaudjuif dans le forum Requêtes
    Réponses: 3
    Dernier message: 19/02/2007, 14h12
  5. Réponses: 2
    Dernier message: 10/01/2007, 17h28

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