J'ai beaucoup entendu ces derniers temps que je devrais jeter un coup d'œil au plan d'exécution de ma SQL pour faire un jugement sur la qualité de sa performance. Cependant, je ne suis pas vraiment sûr où commencer avec cette fonctionnalité ou ce que cela signifie exactement. P>
Je recherche soit une bonne explication de ce que le plan d'exécution fait, quelles sont ses limites et comment je peux l'utiliser ou la direction à une ressource qui fait. P>
7 Réponses :
Un moyen de faciliter cela, c'est simplement en utilisant "Ctrl L" (Query | Afficher le plan d'exécution estimé) pour certaines de vos questions, dans SQL Management Studio. P>
Cela permettra de montrer une vue graphique du plan d'exécution, qui, au début, sont plus faciles à "décoder" que sa version texte. P>
Il existe de nombreuses ressources en ligne ainsi que des livres décrivant plus en détail les plans de requête, la difficulté est que l'optimisation des performances SQL est un problème très large et complexe, et beaucoup de ces ressources ont tendance à faire trop de détails pour le novice ; One a d'abord besoin de comprendre les principes et structures fondamentaux qui sous-tendent SQL Server forts> (la manière dont les index fonctionnent, la manière dont les données sont stockées, la différence entre les index en cluster et les tas ...) avant de plonger dans beaucoup de les détails [important] de l'optimisation de la requête. C'est un peu comme baseball: vous devez d'abord connaître les règles avant de comprendre tous les concepts subtils [et importants] liés à la stratégie de jeu. P>
Voir ce lien associé alors question strong> pour des pointeurs supplémentaires. P >
Essentiellement, le plan de requête montre la manière dont SQL Server a l'intention d'utiliser dans la résolution d'une requête.
Il y a en effet de nombreuses options, même avec des requêtes simples.
Par exemple, lorsqu'il s'agit d'une jointure, il faut décider de se boucler à travers les lignes [filtrées] de "Tableau A" et de rechercher les lignes de "Tableau B" ou de boucler en boucle d'abord "Tableau B" (ceci est Un exemple simplifié, car il existe de nombreuses autres astuces pouvant être utilisées pour traiter des jointures). En règle générale, SQL estimera le nombre de lignes [filtrées] qui seront produites par une table et choisissez celle que le plus petit décompte pour la boucle extérieure (car cela réduira le nombre de recherches dans l'autre table)
Un autre exemple, est de décider des indices à utiliser (ou de ne pas utiliser). P>
Il décrit les algorithmes réels que le serveur utilise pour récupérer vos données.
Un , décrit < em> quel em> devrait être fait mais pas comment em> cela devrait être fait. p> Le plan d'exécution montre comment em>: quels index sont utilisés, Les méthodes de jointure sont choisies (boucles imbriquées ou jointure de hachage ou jointure à la fusion), comment les résultats sont regroupés (en utilisant le tri ou le hachage), comment ils sont commandés, etc. P> Malheureusement, même moderne Un exemple classique serait ces deux requêtes: p> et p> , qui fait le même et en théorie doit être exécuté à l'aide des mêmes algorithmes. P> Cependant, aucun moteur réel optimisera l'ancienne requête pour mettre en œuvre les mêmes algorithmes, je . e. stocker un compteur dans une variable et incrémenter. p> Il fera savoir ce à quoi il se dit de faire: compter les rangées encore et encore et encore. P> Pour optimiser les requêtes dont vous avez besoin de En fait, voir ce qui se passe dans les coulisses, et c'est ce que les plans d'exécution vous montrent. P> Vous voudrez peut-être lire cet article dans mon blog: p> requête SQL code> comme ceci: p>
SQL < / Code> Les moteurs ne peuvent pas trouver automatiquement les plans optimaux pour des requêtes plus ou moins complexes, il prend toujours un développeur
SQL code> pour reformuler les requêtes afin qu'elles soient performantes (même elles font quelle est la requête originale). p>
C'est une partie très sérieuse de la connaissance. Et je suis tout à fait de recommander des cours de formation spéciaux à ce sujet. Quant à moi après la semaine passée sur des cours, j'ai stimulé la performance des requêtes environ 1000 fois ( nostalgie em>) p>
Le plan d'exécution vous montre comment la base de données est extraite, trier et filtrer les données requises pour votre requête.
Par exemple: P>
SELECT * FROM TableA INNER JOIN TableB ON TableA.Id = TableB.TableAId WHERE TableB.TypeId = 2 ORDER BY TableB.Date ASC
Voici une excellente ressource pour vous aider à les comprendre http://downloads.red-gate.com/ebooks/highperformancesql_ebook.zip p>
Ceci est de Red-Gate qui est une entreprise qui fait de superbes outils SQL Server, c'est gratuit et il vaut bien le temps de télécharger et de lire. P>