我有一张超过100MM记录的表。该表具有聚簇索引和非聚簇索引。SQL Server存储过程比直接查询要慢很多
我可以在表上使用T-SQL运行基本计数,并且需要1秒钟的时间才能运行。当我在存储过程中放入相同的精确计数查询时,它需要12秒的时间才能运行。
我已经看过标准查询和存储过程的执行计划,它们都使用非聚集索引。
我不知道为什么存储过程与标准查询相比太慢了。
我已经阅读了一些关于在这种情况下重新索引的东西,但我不知道为什么我需要这样做。另外,重新索引需要几个小时,所以我想确保它能正常工作。
对此的任何帮助将是伟大的。
感谢
UPDATE
这里是存储过程:
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的,母鹿你在任何参数传递? –
我认为你需要展示你的查询和SP。 –
可能发生的情况是,您尝试使用常量进行查询,并且您的过程使用参数而不是此常量。我建议你创建SQLFiddle示例或发布一些关于模式和查询的详细信息/ sp –