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 :

[SQL] Optimisation union , distinct


Sujet :

Oracle

  1. #1
    raj
    raj est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 112
    Par défaut [SQL] Optimisation union , distinct
    Bonjour , voilà j'ai pb suivant :

    J'ai 2 requetes qui executé indépendamment l'une de l'autre prennent
    1.7 secondes .

    Chacune retourne 2 colonnes ( NUMBER tout court ) et retourne une quarantaine de résultats .

    Le paramètre sort_size_area = 1048576

    En effectuant un union des 2 requetes , la requête résultante passe à 90 secondes . Un union all résout le pb .

    Autre souci : quand je rajoute un distinct sur une des deux requêtes , elles passent de 1.7 secondes à plus d'1 minutes .

    Comment cela est possible ?
    Apparemment, c'est le fait de trier les données qui explose le temps d'execution , mais en regardant la valeur de sort_size_area et le nombre
    de lignes retournés par les requêtes , je trouve ca aberrant .

    Quelqu'un a-t-il déja rencontre un pb similaire ?

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Par défaut
    ton sort area size fait 1 MO ce qui est quand même trop peu dans un systéme de production

  3. #3
    Membre chevronné Avatar de Wurlitzer
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 469
    Par défaut
    Effectivement le tri est une affaire couteuse a partir du moment ou il ne se fait plus en mémoire mais sur le disque d'ou l'interet de bien tuner la sort area size.

    Le distinct demande un tri pour eliminer les doublons. L'union aussi. Alors que l'union et bien l'addition pour est simple des deux requetes precedente.

    D'ou la différence de perf entre union all et union

  4. #4
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Effectivement, UNION ALL ne nécessite aucun tri supplémentaire. Donc si vous être certains ne ne pas avoir de doublons (ou de les accepter) utiliser UNION ALL à la place de UNION.

  5. #5
    raj
    raj est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 112
    Par défaut
    Vous pensez que trier une centaine de données n'est pas possible
    sur un sort de 1 M ?
    Je me demande comment Oracle gère le tri ( avec UNION ) , est-ce
    qu'il attend d'avoir le résultat des 2 requetes ou est-ce qu'il reconstruit
    un plan d'execution globale ?
    Un ptit coup de tkprof me donnera la réponse .

  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
    Citation Envoyé par SheikYerbouti
    Effectivement, UNION ALL ne nécessite aucun tri supplémentaire. Donc si vous être certains ne ne pas avoir de doublons (ou de les accepter) utiliser UNION ALL à la place de UNION.
    On peut aussi dédoublonner le résultat des UNION ALL si le nombre de lignes est restreint

Discussions similaires

  1. Optimisation Union All SQL SERVER 2k5
    Par Blacknounou dans le forum Développement
    Réponses: 7
    Dernier message: 11/04/2011, 15h15
  2. [SQL]emploie de DISTINCT
    Par fabszn dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/06/2005, 20h07
  3. [SQL] optimisation
    Par s.grenet dans le forum Langage SQL
    Réponses: 6
    Dernier message: 13/05/2005, 11h57
  4. [OPTIMISATION] [UNION] Union dans une requete
    Par nico44 dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/03/2005, 12h47
  5. [PL/SQL] Optimisation requete SQL
    Par CDRIK dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/10/2004, 09h52

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