我有一个存储过程,每次运行大约需要10秒钟(每次运行大约需要1秒钟)。平台是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