我找不到为什么我的第一个请求比较慢的原因。我在每个循环中都清理缓存,但是仍然有很大的不同。
DECLARE @t1 DATETIME;
DECLARE @t2 DATETIME;
DECLARE @cnt INT = 0;
DECLARE @myTable TABLE
( passage INT NOT NULL,
timer INT NOT NULL);
WHILE @cnt < 10
BEGIN
DBCC DROPCLEANBUFFERS
SET @t1 = GETDATE();
SELECT [IdElement]
, [IdElementary]
FROM [dbo].[Elementest]
WHERE IdelementAccount = 1
SET @t2 = GETDATE();
INSERT INTO @myTable (timer, passage) VALUES (DATEDIFF(millisecond,@t1,@t2), @cnt);
SET @cnt = @cnt + 1;
END;
SELECT * FROM @myTable
计时器的毫秒数为:
970
63
66
63
70
70
66
60
60
66
答案 0 :(得分:1)
RDBMS将查询结果缓存到内存中,以加快访问速度。即使是经常访问的查询也会被缓存,以便从内存而不是磁盘执行执行。
根据您的SQL查询的结构,执行时间可能会有所不同。而且,SQL的保留内存在缓存中起着很大的作用。如果保留内存不足,则RDBMS会频繁释放其缓存,以为新的DML操作打开空间。
因此,在这种情况下,最好专注于资源使用和优化器特定的调整。
我相信您可能会从dba.stackexchange.com
获得更多帮助答案 1 :(得分:0)
我想区别在于查询计划。您有一个参数化查询,因此第一次运行会编译查询并将计划存储在查询缓存中。我很惊讶这将花费900毫秒,但这似乎是造成延迟的原因。