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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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 confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 494
    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 averti
    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
    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 averti
    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
    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 confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 494
    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
    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 averti
    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
    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

Discussions similaires

  1. [Access] Optimisation performance requête - Index
    Par fdraven dans le forum Access
    Réponses: 11
    Dernier message: 12/08/2005, 15h30
  2. Optimisation de requête avec Tkprof
    Par stingrayjo dans le forum Oracle
    Réponses: 3
    Dernier message: 04/07/2005, 10h50
  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, 21h55
  4. optimisation des requêtes
    Par yech dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 21/09/2004, 20h03
  5. Optimisation de requête
    Par olivierN dans le forum SQL
    Réponses: 10
    Dernier message: 16/12/2003, 11h09

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