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 :

Optmisation requête SQL [2014]


Sujet :

Développement SQL Server

  1. #1
    Membre habitué Avatar de olivtone
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2010
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 242
    Points : 153
    Points
    153
    Par défaut Optmisation requête SQL
    Bonjour a Tous

    Je voulais savoir si vous avez une autre facon de reecrire cette requete,
    car cela me ramene des millions de lignes et des temps catastrophiques avec une optimisation possible ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT identifiant
    from Contract CON      with(nolock)
    WHERE identifiant IS NOT NULL
    AND CON.nombre_ligne= 
     
    (select max(CON1.nombre_ligne) 
    from dbo.contract CON1 with(nolock)
    WHERE CON.contrat_parentid=CON1.contrat_parentid )
    merci a vous

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    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 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Y a-t-il un index sur contrat_parentid ?
    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.

  3. #3
    Membre habitué Avatar de olivtone
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2010
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 242
    Points : 153
    Points
    153
    Par défaut
    oui il y en a un, mais je voulais savoir comment reecrire cette requete pour ma connaissance personnel

  4. #4
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Hello,

    Tu peux nous préciser le but de la requête? Que cherches-tu à faire exactement?

    ++

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Réécrire la requête ne signifie pas nécessairement l'optimiser

    Cela devrait donner quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
    GO
     
    SELECT		CON.identifiant
    FROM		dbo.Contract AS CON
    CROSS APPLY	(
    			SELECT	MAX(nombre_ligne)
    			FROM	dbo.contract AS CON1
    			WHERE	CON1.contrat_parentid = CON.contrat_parentid
    		) AS CON1(nombre_ligne)
    WHERE		CON1.nombre_ligne = CON.nombre_ligne
    AND		CON.identifiant IS NOT NULL
    Si vous avez un index filtré sur la colonne identifiant dont le prédicat est IS NOT NULL, le plan l'utilise peut-être.
    Sinon, de quel type de données est cette colonne, et quel est son domaine de valeurs ? (par exemple une valeur toujours supérieure à zéro, ...)

    Une optimisation ne peut se faire qu'avec un plan de requête réel et avec la sortie des instructions SET STATISTICS IO, TIME ON, et pour être parfait, avec le DDL des tables et de leurs index.
    Cela permet de comprendre précisément l'origine de la contre-performance.
    Vous pouvez capturer le plan à l'aide de SQL Server Management Studio (SSMS) en pressant CTRL+M avant l'exécution de la requête.
    Un onglet supplémentaire s’ajoutera dans le panneau des résultats pour l'exposer, juste après la fin de l'exécution de la requête.
    Vous pouvez ensuite réaliser un clic-droit dans un espace vierge du plan pour le sauvegarder et le partager ici.

    Notez que vous pouvez aussi installer l'outil SQL Sentry Plan Explorer qui permet d'anonymiser le plan avant de le partager, mais surtout de visualiser les plans de façon plus simple qu'avec SSMS, notamment par l'exposition des cardinalités entre les opérateurs du plan, les valeurs des paramètres avec lequel le plan a été compilé, et bien d'autres choses encore !

    @++

  6. #6
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Et voici pour vous aider à capturer et anonymiser le plan de requête.

    @++

  7. #7
    Membre habitué Avatar de olivtone
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2010
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 242
    Points : 153
    Points
    153
    Par défaut
    merci beaucoup a vous un index bien placé a resolu le probleme

    merci

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

Discussions similaires

  1. [ DB2 ] [ AS400] requête sql
    Par zinaif dans le forum DB2
    Réponses: 6
    Dernier message: 23/08/2008, 19h42
  2. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  3. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26
  4. PB requète SQL avec Interbase
    Par missllyss dans le forum InterBase
    Réponses: 2
    Dernier message: 15/07/2003, 11h37
  5. Requête SQL
    Par Leludo dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/02/2003, 16h44

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