【发布时间】:2014-08-14 12:26:52
【问题描述】:
我有一个运行速度非常慢的存储过程。我运行了 SP 并查看了执行计划,并且能够看到花费了这么长时间。
慢的部分:
DECLARE
@id int
,@date datetime
,@endDate datetime
SELECT @id = 3483
,@date = DATEADD(DAY, -10, GETDATE())
,@endDate = GETDATE()
SET NOCOUNT ON
SELECT *
,prevId = dbo.fnGetPrevId(id)
FROM dbo.table WITH(READUNCOMMITTED)
这个查询中比较慢的部分是我调用函数 dbo.fnGetPrevId 的地方。
dbo.fnGetPrevId:
DECLARE @prevId int
SELECT TOP 1 @prevId = t2.id
FROM dbo.table2 AS t2 WITH(READUNCOMMITTED)
RETURN @prevId
是否可以在不创建索引或类似的东西的情况下重写以获得更好的性能?
【问题讨论】:
-
是的,但是我该怎么做呢?做不到 = nPrevResultsId = (SELECT TOP 1...) ?
标签: sql sql-server sql-server-2008 tsql