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 :

Performance sur simple requete


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 197
    Par défaut Performance sur simple requete
    Hello,

    j'ai une table T possedant 3 colonnes A (NUMBER) & B (DATE) & C(NUMBER)
    Voici un extrait de ma table T:

    1 25/02/08 25
    1 27/02/08 90
    1 28/02/08 30
    2 03/03/08 88
    2 01/02/08 52
    ...

    je souhaite récupérer A & C pour chaque date max de A:
    1 30
    2 88
    ...

    j'ai donc fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT T.A,T.C FROM T WHERE T.B=
    (SELECT MAX(T2.B) FROM T2 WHERE T2.A=T.A)
    et c'est super long pour des grosses tables.
    Y aurait-il une solution + simple?
    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 : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    regarde du coté des fonctions analytiques, ça a souvent été traité sur ce forum

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 197
    Par défaut
    oui j'ai déjà regarder mais ca n'améliore pas les performances

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    que donne l'explain plan ? Quelle version d'Oracle et les stats sont elles à jour ?

  5. #5
    Expert confirmé 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
    Par défaut
    Citation Envoyé par zizou771 Voir le message
    Hello,
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT T.A,T.C FROM T WHERE T.B=
    (SELECT MAX(T2.B) FROM T2 WHERE T2.A=T.A)
    et c'est super long pour des grosses tables.
    Y aurait-il une solution + simple?
    Merci d'avance.
    Ce qui doit coûter cher ici c’est la sous- interrogation corrélée ! Donc il faut chercher la solution dans les requêtes SQL équivalentes mais qui n’emploient pas ce type de construction.

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T.A,T.C FROM T, (SELECT A, MAX(B) B FROM T2 GROUP BY A) T2
    WHERE T.B=T2.B
    AND T.A=T2.A

  7. #7
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT A,C FROM T
    GROUP BY A
    HAVING A = MAX(A)
    Plutôt ?

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    non, c'est pas la même table

  9. #9
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Par défaut
    comment ça ce n'est pas la même table ?
    Il n'y a qu'une dans son exemple, j'ignore pourquoi il a utilisé un deuxième alias T2 pour la même ...

  10. #10
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 354
    Par défaut
    Citation Envoyé par Vld44 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT A,C FROM T
    GROUP BY A
    HAVING A = MAX(A)
    Plutôt ?
    Mises à part les remarques déjà faites, cette requête n'est pas bonne et elle échouera puisqu'elle sélectionne une colonne qui n'est pas dans la liste GROUP BY ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. performance des index sur une requete
    Par Invité dans le forum SQL
    Réponses: 2
    Dernier message: 27/04/2010, 20h29
  2. [A-00] pb de calcul sur une requete simple
    Par secretaire59 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 28/10/2008, 10h50
  3. bloquage sur une requete pourtant simple
    Par mdr_cedrick dans le forum Langage SQL
    Réponses: 3
    Dernier message: 15/04/2008, 15h55
  4. DBexpress, Simple requete sur server MySql
    Par Ice-tea dans le forum Bases de données
    Réponses: 7
    Dernier message: 02/06/2006, 14h57
  5. Question performance sur requetes sql
    Par shinrei dans le forum ASP
    Réponses: 7
    Dernier message: 19/05/2006, 13h28

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