我有一张表,里面有超过 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 秒)。所以我假设它与参数有关。