gpt4 book ai didi

sql-server - SQL Server 存储过程比直接查询慢很多

转载 作者:行者123 更新时间:2023-12-02 10:42:36 25 4
gpt4 key购买 nike

我有一个表,其中有超过 100MM 的记录。该表有一个聚集索引和一个非聚集索引。

我可以使用 T-SQL 对表运行基本计数,运行需要 1 秒。当我将相同的精确计数查询放入存储过程中时,它需要 12 秒才能运行。

我查看了标准查询和存储过程的执行计划,它们都使用非聚集索引。

我不确定为什么存储过程与标准查询相比如此慢。

我已经阅读了一些有关在这种情况下重新索引的内容,但我不确定为什么需要这样做。另外,重新索引需要几个小时,所以我想确保它能正常工作。

对此的任何帮助都会很棒。

谢谢

更新

这是存储过程:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE quickCount

@sYID INT,
@eYID INT

AS
BEGIN

SET NOCOUNT ON;


SELECT COUNT(leadID)
FROM dbo.leads
WHERE yearID >= @sYID
AND yearID <= @eYID

END
GO

这是标准查询:

SELECT COUNT(leadID)
FROM leads
WHERE yearID >= 0
AND yearID <= 99

我确实尝试在没有参数的情况下运行它,SP 运行得更快(1 秒)。所以我假设它与参数有关。

最佳答案

尝试将 SP 更改为使用传入变量的本地副本。

类似于

ALTER PROCEDURE quickCount  

@sYID INT,
@eYID INT

AS
BEGIN

SET NOCOUNT ON;
DECLARE @Local_sYID INT,
@Local_eYID INT
SELECT @Local_sYID = @sYID INT,
@Local_eYID = @eYID INT

SELECT COUNT(leadID)
FROM dbo.leads
WHERE yearID >= @Local_sYID
AND yearID <= @Local_eYID

END

我之前发现,由于参数嗅探,SP 的运行速度会慢很多,但一旦使用变量的副本,性能就会恢复。

What is Parameter Sniffing ?

SQL Server : Parameter Sniffing

关于sql-server - SQL Server 存储过程比直接查询慢很多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13005076/

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