加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

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

发布时间:2020-12-31 23:52:03 所属栏目:编程 来源:网络整理
导读:我有一张高出100MM的记录表.该表具有聚簇索引和非聚簇索引. 我可以在表上行使T-SQL运行根基计数,运行必要1秒.当我在存储进程中放入沟通的准确计数查询时,它必要12秒才气运行. 我查察了尺度查询和存储进程的执行打算,它们都行使非聚积索引. 我不确定为什么存储

我有一张高出100MM的记录表.该表具有聚簇索引和非聚簇索引.

我可以在表上行使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变动为行使传入的变量的当地副本.

就像是

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

之前我发明因为参数Snffing,SP可以运行得慢许多,可是一旦你行使了变量副本,机能就会规复.

What is Parameter Sniffing ?

SQL Server : Parameter Sniffing

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读