2015-03-02 89 views
0

注:忽视的逻辑内部GO ........... GO,只关注Line 1Line N为什么执行时间与以下SQL Server代码不同?

SELECT DATENAME(NANOSECOND, GETDATE()) --Line 1 

GO 
BEGIN 
    DECLARE @t1 NVARCHAR(100) 
    DECLARE @datetime1 DATETIME = '12-23-35'; 
    DECLARE @time1 TIME(4) = '11:10:05.1234'; 
    DECLARE @time2 TIME(5) = '11:10:05.12345'; 
    DECLARE @datetime2 DATETIME; 

    SET @datetime2 = @datetime1 
    SET @datetime2 = @time1 

    DECLARE @datetime3 DATETIME = @time2 
    DECLARE @datetime4 SMALLDATETIME = @time1 

    IF @datetime1 = @datetime2 
     PRINT 'True' 
    ELSE 
     PRINT 'False' 

    IF @datetime2 = @datetime3 
     PRINT 'True' 
    ELSE 
     PRINT 'False' 

    IF @datetime3 = @datetime4 
     PRINT 'True' 
    ELSE 
     PRINT 'False' 

    SELECT @datetime1 AS 'datetime1' 
     ,@datetime2 AS 'datetimevar2' 
     ,@datetime3 AS 'datetimevar3' 
     ,@datetime4 AS 'datetimevar4' 
END 
GO 

SELECT DATENAME(NANOSECOND, GETDATE()) --Line N 

问题: 对于上面的代码中,在每一个新的执行 Line N结果 - Line1结果不一样。 这是为什么呢?

+0

您希望每次执行相同的代码时都需要完全相同的时间吗? – Rubik 2015-03-02 08:59:30

回答

0

有很多原因,最简单的原因是计算机是多任务处理,即在同一时间做很多事情。所以,这取决于它在做什么。

相信我,你不应该担心这种事情。它为什么如此重要?当您发现性能问题时,您不得不担心执行时间的重要差异。担心这是没用的。

0

你得到不同的值,因为GETDATE()返回当前的日期和时间,时间线1和第n行的执行之间的流逝,你可以大量简化您的查询,并得到同样的结果:

SELECT TOP 1 DATENAME(NANOSECOND, GETDATE()) --Line 1 
WAITFOR DELAY '00:00:00.01'; 
SELECT TOP 1 DATENAME(NANOSECOND, GETDATE()) --Line N 

有在那里TOP 1可以让你得到执行计划时,您将在其中看到每次发言,有下列块:

enter image description here

是为每个陈述重复。 GETDATE()是一个运行时常量,但可以不止一次在同一语句中进行评估,并且对于多个语句肯定会评估多次。

相关问题