2010-08-24 6 views
1

J'ai une requête qui s'exécute lentement. Je sais généralement pour accélérer les performances, limiter les jointures et essayer d'utiliser des procs au lieu de requêtes droites. En raison de règles métier, je ne peux pas utiliser les procédures. J'ai déjà réduit le nombre de jointures autant que je peux penser.Comment régler une requête

Quelle est la prochaine étape dans l'optimisation des requêtes?

+0

L'optimisation de la requête est un très grand domaine, et il est impossible de dire à partir de ce que vous avez écrit à quel point vous y êtes adepte. Il serait préférable que vous mettiez un exemple de question et que vous nous disiez en détail ce que vous avez essayé. Je n'ai même aucune idée si vous avez même pensé aux indices, ou si vous avez mesuré la performance avec tous les index raisonnables et êtes toujours perplexe. –

+1

Couper les jointures n'est pas une bonne idée si les données renvoyées sont différentes. Ce n'est généralement pas un bon moyen d'améliorer les performances car vous perdez généralement des informations. – HLGEM

+0

[SET SHOWPLAN_ALL] (http://msdn.microsoft.com/fr-fr/library/ms187735.aspx) –

Répondre

2

la chose la plus facile à faire est aller au studio de gestion exécuter cette commande:

SET SHOWPLAN_ALL ON 

puis exécutez votre requête réelle.

Vous n'obtiendrez pas votre jeu de résultats de requête standard. Il vous donnera le plan d'exécution (une liste très détaillée de ce que fait SQL Server pour transformer votre requête) dans un ensemble de résultats. Regardez par-dessus la sortie et essayez d'apprendre ce que cela signifie. Je recherche généralement "SCAN", c'est une partie lente, et j'essaye de le réécrire pour qu'il utilise un index.

3

L'ajout d'index est probablement la première chose que vous pouvez faire pour améliorer les performances des requêtes et vous ne l'avez pas mentionné.

Avez-vous regardé le plan d'exécution pour voir si cela pouvait être amélioré avec des index supplémentaires?

De plus, vous devez vous assurer que vos requêtes sont rédigées de telle manière qu'ils peuvent utiliser tous les index sont présents efficacement (par exemple, éviter des constructions non sargable, éviter *)

+1

Évitez également le traitement des lignes ligne par ligne, ce qui signifie que vous devez supprimer autant que possible les sous-requêtes et les curseurs corrélés. – HLGEM

+1

Aussi, beaucoup de gens oublient de mettre des index sur les FK dans leur système, les PK sont automatiquement indexés, les FK ne le sont pas. – HLGEM