Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, questions/réponses pour les FAQ, sources et autres ressources pour la rubrique Microsoft SQL Server ainsi que ses sous-rubriques.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/06/2011, 11h34   #1
Membre chevronné
 
Inscription : juillet 2006
Messages : 1 194
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 1 194
Points : 746
Points : 746
Par défaut [2005] DISTINCT qui améliore les performances

J'ai pu constater dans certains cas assez voire très rares et alors que l'on récupère des lignes qui sont toutes uniques, l'emploie de DISTINCT améliorait les performance (et ce de façon très importante).

Je n'ai pas d'explication (j'ai pourtant cherché) mais dans les changements que l'emploie de DISTINCT provoque dans le query plan, tant à l'exécution du plan qu'à son estimation (et c'est là que c'est fou*) il y a un gouffre de performance à l'avantage de l'emploie de DISTINCT.

Cela est tout à fait anormal mais c'est bon à savoir (surtout que vous ne lirez pas ceci partout) car puisque ne coûtant que 8 lettre, on peut se permettre d'expérimenté sur nos query les plus complexes (et peut-être avoir de plaisantes surprises).


* SQL Server établit plusieurs plans selon son IA et en retient le meilleur candidat.
Sergejack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2011, 13h42   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 954
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 954
Points : 17 774
Points : 17 774
Ce comportement est normal s'il existe un index couvrant par rapport à la clause SELECT.
Lisez les article que j'ai écrit à ce sujet et notamment "que faut-il indexer".

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2011, 14h15   #3
Membre chevronné
 
Inscription : juillet 2006
Messages : 1 194
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 1 194
Points : 746
Points : 746
Citation:
Envoyé par SQLpro Voir le message
Ce comportement est normal s'il existe un index couvrant par rapport à la clause SELECT.
Et en quoi "s'il existe un index couvrant par rapport à la clause SELECT", l'absence de DISTINCT résulte en une chute des performances ?
Sergejack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2011, 14h32   #4
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
Je suis bien prêt à vous croire mais il faudrait pouvoir au moins avoir un exemple avec la requete et les plans d'exécutions ....

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2011, 17h42   #5
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Parlez vous de cas d'utilisation de distinct dans des sous-tables du SELECT comme ci-dessous?

Code :
1
2
3
4
5
 
FROM A INNER JOIN 
   (SELECT DISTINCT ... 
    FROM B) B
       ON B.ID=A.ID
Merci de poster votre exemple...
Je pense personnellement que les (le?) cas que vous avez rencontré montre un manque de statistique correct(ou manque de mise à jour de celles-ci) ou de contraintes manquantes empêchant SQL Server de correctement évaluer le nombre de ligne à traiter...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h50.


 
 
 
 
Partenaires

Hébergement Web