gpt4 book ai didi

与下次运行相比,sql 查询需要很长时间

转载 作者:行者123 更新时间:2023-12-03 06:59:05 25 4
gpt4 key购买 nike

我正在运行一个程序,第一次执行大约需要 1 分钟,但下一次执行时间会减少到大约 9-10 秒。一段时间后,又需要大约 1 分钟。

我的程序正在使用具有 6 个非聚集索引和 1 个聚集索引的单个表,并且唯一 id 列是具有 1,218,833 行的 uniqueidentifier 数据类型。

您能指导我问题/可能的性能改进在哪里吗?

提前致谢。

这是程序。

 PROCEDURE [dbo].[Proc] (
@HLevel NVARCHAR(100),
@HLevelValue INT,
@Date DATE,
@Numbers NVARCHAR(MAX)=NULL
)
AS

declare @LoopCount INT ,@DateLastYear DATE


DECLARE @Table1 TABLE ( list of columns )
DECLARE @Table2 TABLE ( list of columns )

-- LOOP FOR 12 MONTH DATA
SET @LoopCount=12
WHILE(@LoopCount>0)
BEGIN
SET @LoopCount= @LoopCount -1

-- LAST YEAR DATA
DECLARE @LastDate DATE;
SET @LastDate=DATEADD(D,-1, DATEADD(yy,-1, DATEADD(D,1,@Date)))




INSERT INTO @Table1
SELECT list of columns
FROM Table3 WHERE Date = @Date
AND
CASE
WHEN @HLevel='crieteria1' THEN col1
WHEN @HLevel='crieteria2' THEN col2
WHEN @HLevel='crieteria3' THEN col3
END =@HLevelValue



INSERT INTO @Table2
SELECT list of columns
FROM table4
WHERE Date= @LastDate
AND ( @Numbers IS NULL OR columnNumber IN ( SELECT * FROM dbo.ConvertNumbersToTable(@Numbers)))

INSERT INTO @Table1
SELECT list of columns
FROM @Table2 Prf2 WHERE Prf2.col1 IN (SELECT col2 FROM @Table1) AND Year(Date) = Year(@Date)



SET @Date = DATEADD(D,-1,DATEADD(m,-1, DATEADD(D,1,@Date)));

END

SELECT list of columns FROM @Table1

最佳答案

第一次运行查询时,数据不在数据缓存中,因此必须从磁盘检索。此外,它还必须准备一个执行计划。随后运行查询时,数据将位于缓存中,因此不必转到磁盘来读取它。它还可以重用原来生成的执行计划。这意味着执行时间可以更快,因此理想的情况是拥有大量 RAM,以便能够在内存中缓存尽可能多的数据(数据缓存提供最大的性能改进)。

如果执行时间随后再次增加,则数据可能会从缓存中删除(并且执行计划也可能从缓存中删除) - 取决于 RAM 的压力有多大。如果 SQL Server 需要释放一些内容,它将从缓存中删除内容。最常用/具有最高值(value)的数据/执行计划将保留缓存更长时间。

当然还有其他因素可能是一个因素,例如当时服务器上的负载、您的查询是否被其他进程阻止等

关于与下次运行相比,sql 查询需要很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4049970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com