Calculer le temps d'exécution D'une requête SQL?

Je fournis une fonctionnalité de recherche sur mon site web, lorsque l'utilisateur recherche un enregistrement, je souhaite afficher l'heure à laquelle la requête a été effectuée pour obtenir les mêmes résultats que google. Lorsque nous recherchons quoi que ce soit alors google affiche combien de temps il faut pour obtenir des résultats?

Pour cela, j'ai déclaré une variable @ start dans mon SP et trouver la différence à la fin, comme ci-dessous;

DECLARE @start_time DATETIME

SET @start_time = GETDATE()

-- my query
SELECT * FROM @search_temp_table

SELECT RTRIM(CAST(DATEDIFF(MS, @start_time, GETDATE()) AS CHAR(10))) AS 'TimeTaken'

Est-il un autre moyen facile et rapide, ou une seule ligne de requête avec laquelle nous pouvons retrouver le temps d'une requête prises pour s'exécuter?

J'utilise SQL Server 2005.

46
demandé sur marc_s 2009-02-27 20:31:24

8 réponses

Nous surveillons cela à partir du code de l'application, juste pour inclure le temps nécessaire pour établir/fermer la connexion et transmettre des données à travers le réseau. C'est assez simple...

Dim Duration as TimeSpan
Dim StartTime as DateTime = DateTime.Now

'Call the database here and execute your SQL statement

Duration = DateTime.Now.Subtract(StartTime)
Console.WriteLine(String.Format("Query took {0} seconds", Duration.TotalSeconds.ToString()))
Console.ReadLine()
19
répondu Josh Stodola 2009-02-27 20:10:42

Eh bien, si vous voulez vraiment le faire dans votre base de données, il existe un moyen plus précis comme indiqué dans MSDN :

SET STATISTICS TIME ON

Vous pouvez également lire ces informations à partir de votre application.

86
répondu Faiz 2013-09-13 09:39:50

J'ai trouvé celui-ci plus utile et simple

DECLARE @StartTime datetime,@EndTime datetime   
SELECT @StartTime=GETDATE() 
--Your Query to be run goes here--  
SELECT @EndTime=GETDATE()   
SELECT DATEDIFF(ms,@StartTime,@EndTime) AS [Duration in milliseconds]   
25
répondu Navaneet 2014-02-13 14:38:41

Veuillez utiliser

-- turn on statistics IO for IO related 
SET STATISTICS IO ON 
GO

Et pour le calcul du temps utiliser

SET STATISTICS TIME ON
GO

Ensuite, il donnera un résultat pour chaque requête . Dans la fenêtre messages près de la fenêtre d'entrée de requête.

17
répondu Rakesh Sahu 2012-09-27 14:40:12
declare @sttime  datetime
set @sttime=getdate()
print @sttime
Select * from ProductMaster   
SELECT RTRIM(CAST(DATEDIFF(MS, @sttime, GETDATE()) AS CHAR(10))) AS 'TimeTaken'    
14
répondu XXX 2011-04-06 00:20:00

Pourquoi le faites - vous en SQL? Certes, cela montre un temps de requête "vrai" par opposition au temps de requête + temps nécessaire pour mélanger les données dans les deux sens sur le réseau, mais cela pollue votre code de base de données. Je doute que vos utilisateurs s'en soucient - en fait, ils devraient probablement plutôt inclure le temps réseau, car tout cela contribue au temps nécessaire pour voir la page.

Pourquoi ne pas faire le timing dans votre code d'application web? Mis à part toute autre chose, cela signifie que pour les cas où vous ne voulez pas {[2] } Faire un timing, mais vous voulez exécuter le même processus, vous n'avez pas besoin de jouer avec quelque chose dont vous n'avez pas besoin.

8
répondu Jon Skeet 2009-02-27 17:34:58

Vous pouvez utiliser

SET STATISTICS TIME { ON | OFF }

Affiche le nombre de millisecondes nécessaires pour analyser, compiler et exécuter chaque instruction

Lorsque L'Heure de réglage des statistiques est activée, les statistiques de temps d'une instruction sont affichées. Lorsque désactivé, les statistiques de temps ne sont pas affichées

USE AdventureWorks2012;  
GO         
SET STATISTICS TIME ON;  
GO  
SELECT ProductID, StartDate, EndDate, StandardCost   
FROM Production.ProductCostHistory  
WHERE StandardCost < 500.00;  
GO  
SET STATISTICS TIME OFF;  
GO  
1
répondu Nayas Subramanian 2017-06-06 06:51:44

Essayez ceci

DECLARE @StartTime DATETIME
SET @StartTime = GETDATE()

  SET @EndTime = GETDATE()
  PRINT 'StartTime = ' + CONVERT(VARCHAR(30),@StartTime,121)
  PRINT '  EndTime = ' + CONVERT(VARCHAR(30),@EndTime,121)
  PRINT ' Duration = ' + CONVERT(VARCHAR(30),@EndTime -@starttime,114)

Si cela ne le fait pas, essayez de définir L'heure des statistiques sur

0
répondu Tanmay Nehete 2014-06-22 22:51:18