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 :

Problème de lenteur sur une requête


Sujet :

SQL Oracle

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mai 2014
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Problème de lenteur sur une requête
    Bonjour,

    J'ai des problèmes de lenteurs sur une requête SQL :
    La requête est de ce type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    SELECT 
    DISTINCT 
    TEST.NAME, 
    TEST.NomF 
    FROM 
    (SELECT F.NAME NomF, F.TYPE, F.NAME NomC, P.ID IdtProduit,
     (SELECT DISTINCT NAME FROM Produits P 
    WHERE TYPE NOT IN (1 ,10) 
    AND P.ID = PR.ID 
    START WITH ID = P.ID 
    CONNECT BY PRIOR P.ID = ID 
    ) AAT 
    FROM Produits PR, 
    Demandes D, 
    Fournissuers F, 
    Clients C, 
    Clients F, 
    Produits P
     WHERE D.ID = PR.ID 
    AND D.ID = F.ID 
    AND C.ID = PR.ID 
    AND F.ID = P.ID) TEST 
    WHERE TEST.AAT IS NOT NULL ;
    Avez vous des pistes d'améliorations du code de la requête ?

    Merci par avance

  2. #2
    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
    Première remarque: pour analyser les problèmes de performance d'une requête il faut poster plusieurs informations dont une recherche sur ce site vous apprendra le démarche à suivre.

    Deuxième remarque: il n'est pas possible d'analyser un requête sans utiliser un minimum de formatage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    SELECT DISTINCT TEST.NAME, TEST.NomF
      FROM (SELECT F.NAME NomF,
                   F.TYPE,
                   F.NAME NomC,
                   P.ID IdtProduit,
                   (SELECT DISTINCT NAME
                      FROM Produits P
                     WHERE TYPE NOT IN (1, 10)
                       AND P.ID = PR.ID
                     START WITH ID = P.ID
                    CONNECT BY PRIOR P.ID = ID) AAT
              FROM Produits     PR,
                   Demandes     D,
                   Fournissuers F,
                   Clients      C,
                   Clients      F,
                   Produits     P
             WHERE D.ID = PR.ID
               AND D.ID = F.ID
               AND C.ID = PR.ID
               AND F.ID = P.ID) TEST
     WHERE TEST.AAT IS NOT NULL;
    Troisième remarque : il n'est pas possible d'optimiser un requête qu'on ne comprends pas.

    En attendant les autres infos nécessaires voici quelques remarques sur la requête telle-quelle:
    • elle doit être erronée parce que vous utilisez deux fois l'alias F pour les tables Fournisseurs et Clients
    • elle fait un semi-produit cartésien: 6 table (2 fois Produits et Clients ) et seulement 4 conditions de jointures
    • la présence a deux reprise du distinct semble à être un sort de cache misère d'une requête mal écrite
    • la sous-requête scalaire semble à forcer l'optimiseur à aller dans le choux dans ce cas
    • la condition finale: TEST.AAT Is not null indique que la jointure externe implicite induite par la sous-requête scalaire est erronée parce que c'est une jointure interne qui est désirée


    Je pense que vous devez commencer par comprendre ce que la requête essaie de faire et de la réécrire tout simplement.

Discussions similaires

  1. Problème de totalisation sur une requête
    Par lodan dans le forum Requêtes
    Réponses: 3
    Dernier message: 30/11/2009, 18h40
  2. Lenteur sur une requête avec jointure
    Par mister3957 dans le forum SQL
    Réponses: 16
    Dernier message: 13/08/2008, 13h10
  3. Problème de SUM sur une requête SQL
    Par Lapicure dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 12/06/2007, 11h51
  4. Problème avec coun(*) sur une requête
    Par Kaoru-tabris dans le forum Requêtes
    Réponses: 1
    Dernier message: 10/03/2007, 15h00
  5. [MSDE] Problème de groupage sur une requête
    Par joefou dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 17/11/2006, 09h43

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