gpt4 book ai didi

sql - 存储过程;插入缓慢

转载 作者:行者123 更新时间:2023-12-01 11:10:50 26 4
gpt4 key购买 nike

我有一个 SP 需要 10 秒才能运行大约 10 次(每次运行大约一秒)。平台是 asp .net,服务器是 SQL Server 2005。我已经对表进行了索引(不在 PK 上),这不是问题所在。一些注意事项:

  • usp_SaveKeyword 不是问题所在。我注释掉了整个 SP,但没有区别。
  • 我将@SearchID 设置为 1,时间显着减少,交易平均只用了大约 15 毫秒。
  • 除了插入到 tblSearches 之外,我注释掉了整个存储过程,但奇怪的是,它执行起来花费了更多时间。

对可能发生的事情有任何想法吗?

set ANSI_NULLS ON

go

ALTER PROCEDURE [dbo].[usp_NewSearch]

@Keyword VARCHAR(50),

@SessionID UNIQUEIDENTIFIER,

@time SMALLDATETIME = NULL,

@CityID INT = NULL

AS

BEGIN

SET NOCOUNT ON;

IF @time IS NULL SET @time = GETDATE();



DECLARE @KeywordID INT;

EXEC @KeywordID = usp_SaveKeyword @Keyword;

PRINT 'KeywordID : '

PRINT @KeywordID

DECLARE @SearchID BIGINT;

SELECT TOP 1 @SearchID = SearchID

FROM tblSearches

WHERE SessionID = @SessionID

AND KeywordID = @KeywordID;



IF @SearchID IS NULL BEGIN

INSERT INTO tblSearches

(KeywordID, [time], SessionID, CityID)

VALUES

(@KeywordID, @time, @SessionID, @CityID)

SELECT Scope_Identity();

END

ELSE BEGIN

SELECT @SearchID

END



END

最佳答案

为什么在此查询中使用 top 1 @SearchID 而不是 max (SearchID)where existstop 要求您运行查询并从结果集中检索第一行。如果结果集很大,这可能会在您获得最终结果集之前消耗大量资源。

SELECT TOP 1 @SearchID = SearchID    
FROM tblSearches
WHERE SessionID = @SessionID
AND KeywordID = @KeywordID;

我没有看到任何明显的原因 - 上述任何一个构造都应该通过非常便宜的索引查找为您提供语义上与此等效的东西。除非我遗漏了什么,否则你应该能够做类似的事情

select @SearchID = isnull (max (SearchID), -1)
from tblSearches
where SessionID = @SessionID
and KeywordID = @KeywordID

这应该是相当有效的并且(除非我遗漏了什么)在语义上是等价的。

关于sql - 存储过程;插入缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/120952/

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