Comment comparer deux requêtes?
Comment puis-je comparer les deux requêtes X et Y et de dire que X est mieux que Y, quand ils ont tous deux prendre presque dans le même temps dans de petites affaires scénarios?
Le problème est que j'ai deux requêtes qui sont censés fonctionner sur une très grosse base de données, exécuter et évaluer n'est pas une option. Nous avons donc créé une petite base de données pour effectuer quelques tests. L'évaluation de la requête est mieux, c'est un problème, car sur notre base de test, ils courent à peu près le même temps (environ 5 minutes). En outre, le temps de retour, ce qui est une autre façon de mesurer la qualité d'une requête?
- Salut, je viens de mettre en question MSSQL
Vous devez vous connecter pour publier un commentaire.
D'exécuter les requêtes et de les comparer lectures logiques pour les différentes tables et des délais d'exécution.
CTRL+M
(inclure le plan d'exécution réel) et puisF5
. Ensuite, passez la souris sur le premier nœud dans leActual Execution Plan
onglet et de lire lesEstimated Subtree Cost
.Comme déjà mentionné, vérifiez les plans d'exécution.
Important, comparez les 2 requêtes assez en désactivant le cache vers le bas entre chaque course, juste pour s'assurer que vous ne voyez pas des résultats faussés en raison de l'effet de données déjà mis en cache (ne pas exécuter sur le serveur de production):
Alors que j'ai l'habitude de faire est de vérifier le Lit, Écrit, de l'UC et de la Durée d'une comparaison.
Il est très important que vous le tester avec la production de données au niveau des volumes (et idéalement de plus pour voir comment il sera mis à l'échelle). C'est à ces volumes que vous allez vraiment voir toute différence de performances. Des essais avec de petits volumes de données peut vous exposer à des problèmes plus tard.
Avez-vous examiné les plans de requête? Si les requêtes sont de retour les mêmes données et prenez la même quantité de temps à s'exécuter, ma conjecture est que les plans de requête sera presque identiques, ce qui signifie que il n'y a pas de différence signicative entre les deux requêtes.
Aussi, avez-vous pris en compte que les requêtes fonctionnent différemment que les changements de taille de la base de données?
Je me demande si vous êtes prématurément l'optimisation du code. Dans mon esprit, si j'ai une requête qui fonctionne et qui est compréhensible, je peux régler les problèmes de rendement par le biais des index. Et c'est généralement plus facile que de modifier les requêtes pour améliorer les performances.
Évaluation des performances des requêtes sur un significativement différente de l'ensemble de données est en général très peu de sens. Les plans de requête et leur efficacité peut varier considérablement selon les données statistiques.
Afin d'obtenir toutes les estimations les plus réalistes, vous avez besoin d'une base de données en tant que proche du "réel" que possible. Le meilleur de tous, prendre une copie de votre "base de données" et affiner vos requêtes à elle.