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 :

Lenteur d'une requête => A refaire?


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 47
    Par défaut Lenteur d'une requête => A refaire?
    Bonjour à tous,


    Je connais actuellement un problème avec une requête.
    Elle est tres lente, passe sur un environnement avec une volumétrie relative mais pas sur un environnement avec une volumétrie beaucoup plus importante. Qui plus est, ce n'est qu'une partie de la requête finale que j'essaie de faire donc il vaudrait mieux que je trouve autre chose .


    Pour la requête, je cherche à extraire sur une période donnée (arbitrairement ici 05/02/2008 ->05/03/2008) la liste de 10 enregistrements de durée la plus longue, la date de chaque enregistrement, le minimum sur la durée et la date du minimum.

    Voici ma requête SQL :
    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
     
    select * from (
    	select MABASE.NAME,max(JBDTFIN-JBDTDEBUT),JBDTDEBUT,P.min,P.date_debut_min
    	FROM MABASE
    	left join (
    		select NAME,min(JBDTFIN-JBDTDEBUT) as min,JBDTDEBUT as date_debut_min FROM MABASE
    		where (JBDTDEBUT>=to_date('05/02/2008','DD/MM/YYYY')) 
    		and (JBDTFIN<=to_date('05/03/2008','DD/MM/YYYY')) 
    		and JBSTATE = 'Ok'
    		group by NAME,JBDTDEBUT
    		) P on P.name = MABASE.name
    	where (JBDTDEBUT>=to_date('05/02/2008','DD/MM/YYYY')) 
    	and (JBDTFIN<=to_date('05/03/2008','DD/MM/YYYY')) 
    	and JBSTATE = 'Ok'
    	group by MABASE.NAME,MABASE.JBDTDEBUT,P.min,P.date_debut_min
    	order by max(JBDTFIN-JBDTDEBUT) DESC)
    WHERE rownum <= 10
    Voyez vous comment je pourrais faire autrement ma requête pour qu'elle soit plus rapide et que je puisse la lancer sur un autre environnement?

    Merci d'avance

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    On est pas voyant extra-lucide donc sans l'explain plan et les indexes j'vois mal comment on peut t'aider

    On peux déjà dire que ramener des gros volumes juste pour 10 lignes c'est pas super... regarde du coté des fonctions analytiques RANK ou ROW_NUMBER pour arranger ça.

  3. #3
    Membre chevronné Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Par défaut
    sans la version de la base c'est un peu dur aussi ...

    (notamment pour savoir si tu peux mettre un index de fonctions)

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    LEFT JOIN 9i minimum donc index de fonction

  5. #5
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 47
    Par défaut
    Merci pour ces débuts de réponses,

    Ce sont des bases 9.2.0

  6. #6
    Membre chevronné Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Par défaut
    Citation Envoyé par orafrance Voir le message
    LEFT JOIN 9i minimum donc index de fonction
    ben j'avais vu mais j'avais un doute !
    Comme je n'ai bossé que sur du 8i et 10g, je ne savais plus si les index de fonctions existaient en 9...

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 270
    Par défaut
    A vue de nez, en faisant un alias sur mabase, tu peut éviter un niveau de from

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Select * from (
    select M1.cols..., min(m2.cols),...
    from mabase M1, mabase m2
    Where
    ...
    Group by M1.cols,..., M2.cols)
    etc...
    tu gagneras probablement la construction complete de ton group by imbriqué stocké dans une table temporaire non indéxée... Enfin, je dis ça, mais sans le plan....

Discussions similaires

  1. [AC-2007] Lenteur d'une requête lors du premier lancement
    Par Bamban dans le forum Access
    Réponses: 4
    Dernier message: 27/10/2011, 17h15
  2. lenteur d'une requète CTE
    Par PickEpique dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 26/10/2009, 19h57
  3. Lenteur sur une requête avec jointure
    Par mister3957 dans le forum SQL
    Réponses: 16
    Dernier message: 13/08/2008, 14h10
  4. lenteur d'une requête ajout - 9000 enregistrements
    Par NATOU2 dans le forum VBA Access
    Réponses: 5
    Dernier message: 16/01/2008, 11h16
  5. Problème lenteur avec une requête de recherche
    Par Bobtop dans le forum Requêtes
    Réponses: 6
    Dernier message: 03/12/2007, 06h38

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