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

Développement SQL Server Discussion :

Optimisation de requête


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    développeur
    Inscrit en
    Janvier 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Janvier 2013
    Messages : 26
    Points : 14
    Points
    14
    Par défaut Optimisation de requête
    Bonjour j'ai deux tables PARC et SERVICE

    PARC (44000 ligne)

    CONTRAT_CODE|MSDISDN
    C0000327056|0660694986
    C0000327057|0660694986

    SERVICE (500 000 ligne )

    CONTRATCODE|CODE_SERVICE|PARAM_VALUE|VARIABLE|FILE_NAME|DATE
    C0000327056 |SERV1|PARAM1|VARIABLE1|file1.txt|21/12/2013
    C0000327056 |SERV1|PARAM1|VARIABLE1|file2.txt|22/12/2013
    C0000327056 |SERV1|PARAM1|VARIABLE1|file3.txt|23/12/2013

    je fais une joiture par CONTRATCODE pour recuperer le MSDISDN , et je fais un group by pour supprimer les doublons des colonnes CODE_SERVICE, PARAM_VALUE,VARIABLE.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select P.MSISDN S_MSISDN ,S.SERVICE_CODE S_SERVICE ,ISNULL(S.PARAM_CODE,'') S_PARAM , ISNULL(S.PARAM_VALUE,'') S_VARIABLE , MAX(S.FILE_NAME) AS S_FILE_NAME from SERVICE S 
    INNER JOIN  PARC P ON S.CONTRACT_CODE = P.CONTRACT_CODE
    group BY P.MSISDN,S.SERVICE_CODE,S.PARAM_CODE,PARAM_VALUE
    Le problème c'est que ma requete met 14 minute pour s'exécuter , comment je peux l'optimiser ?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 203
    Points : 12 781
    Points
    12 781
    Par défaut
    Bonjour,
    Citation Envoyé par yassineonline2013 Voir le message
    et je fais un group by pour supprimer les doublons des colonnes
    GROUP BY ne sert pas à supprimer les doublons ! Il faut utiliser DISTINCT !
    De plus, toutes les colonnes de la table résultat qui ne sont pas dans la clause GROUP-BY doivent faire l'objet d'une fonction d'agrégation (sum, avg...).

    Concernant le problème de performance, quels sont les indexes ?
    Est-ce qu'on peut voir le plan d'exécution (EXPLAIN) ?

    Tatayo.

  3. #3
    Membre à l'essai
    Profil pro
    développeur
    Inscrit en
    Janvier 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Janvier 2013
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    en fait j'ai fait un group by , par ce que je voulais récupérer aussi la colonne FILE_NAME , peu importe lequel mais au moins un FILE_NAME parmi les doublons des autres 3 colonnes .

    je ne peux pas faire un distinct juste sur ces colonnes , CODE_SERVICE, PARAM_VALUE,VARIABLE

  4. #4
    Membre à l'essai
    Profil pro
    développeur
    Inscrit en
    Janvier 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Janvier 2013
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    les index sont les ids (clé primaires des tables )
    id_SERVICE (clé primaire et index)
    id_PARC (clé primaire et index)

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 203
    Points : 12 781
    Points
    12 781
    Par défaut
    Je n'avais pas vu le MAX(S.FILE_NAME) dans la requête, je reviens sur ce que je disais concernant le GROUP BY (enfin sur la forme...).

    Pour les performances, je dirai qu'il faut un index sur CONTRAT_CODE dans les deux tables.

    Tatayo.

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Citation Envoyé par yassineonline2013 Voir le message
    les index sont les ids (clé primaires des tables )
    id_SERVICE (clé primaire et index)
    id_PARC (clé primaire et index)
    Alors pourquoi votre table SERVICE ne contient-elle pas la colonne id_parc en lieu et place de la colonne CONTRAT_CODE ? Quel est le type de cette colonne

    Pouvez vous poster les DDL complets des deux tables, et une petite explication du contexte ?

  7. #7
    Membre à l'essai
    Profil pro
    développeur
    Inscrit en
    Janvier 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Janvier 2013
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    merci pour votre aide , en fait le problème viens du fait qu'il y a assez de ligne dupliqué dans la table PARC.
    j'ai changé ma requete en cela , et ca met 5 seconde au lieu de 14 minute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select P.MSISDN S_MSISDN ,S.SERVICE_CODE S_SERVICE ,ISNULL(S.PARAM_CODE,'') S_PARAM , ISNULL(S.PARAM_VALUE,'') S_VARIABLE , MAX(S.FILE_NAME) AS S_FILE_NAME from SERVICE S 
    INNER JOIN  (SELECT DISTINCT p.CONTRACT_CODE , p.MSISDN from PARC p ) AS P ON S.CONTRACT_CODE = P.CONTRACT_CODE
    group BY P.MSISDN,S.SERVICE_CODE,S.PARAM_CODE,PARAM_VALUE

  8. #8
    Membre à l'essai
    Profil pro
    développeur
    Inscrit en
    Janvier 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Janvier 2013
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    Comment indiqué que c'est résolu dans ce forum ?

  9. #9
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 081
    Points : 30 823
    Points
    30 823
    Par défaut
    En cliquant sur le bouton qui se trouve juste sous le dernier message.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

Discussions similaires

  1. [Access] Optimisation performance requête - Index
    Par fdraven dans le forum Access
    Réponses: 11
    Dernier message: 12/08/2005, 14h30
  2. Optimisation de requête avec Tkprof
    Par stingrayjo dans le forum Oracle
    Réponses: 3
    Dernier message: 04/07/2005, 09h50
  3. Optimiser une requête SQL d'un moteur de recherche
    Par kibodio dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/03/2005, 20h55
  4. optimisation des requêtes
    Par yech dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 21/09/2004, 19h03
  5. Optimisation de requête
    Par olivierN dans le forum SQL
    Réponses: 10
    Dernier message: 16/12/2003, 10h09

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