我写了一个存储过程,昨天,它通常在一秒钟内完成。今天,大约需要 18 秒。我昨天也遇到了这个问题,似乎可以通过删除并重新创建存储过程来解决。今天,这个技巧似乎不起作用。:(
有趣的是,如果我复制存储过程的主体并将其作为一个简单的查询执行,它会很快完成。似乎是一个存储过程减慢了它的速度......!
有谁知道问题可能是什么?我已经搜索过答案,但他们通常建议通过 Query Analyser 运行它,但我没有它 - 我现在使用的是 SQL Server 2008 Express。
存储过程如下;
更改程序 [dbo].[spGetPOI]
@lat1 浮动,
@lon1 浮动,
@lat2 浮动,
@lon2 浮动,
@minLOD 小整数,
@maxLOD 小整数,
@精确位
作为
开始
-- 将查询矩形创建为多边形
声明@bounds 地理;
SET @bounds = dbo.fnGetRectangleGeographyFromLatLons(@lat1, @lon1, @lat2, @lon2);
-- 执行选择
如果 (@exact = 0)
开始
选择 [ID], [名称], [类型], [数据], [MinLOD], [MaxLOD], [Location].[Lat] AS [Latitude], [Location].[Long] AS [Longitude], [来源ID]
来自 [兴趣点]
在哪里
不是 ((@maxLOD [MaxLOD])) 和
(@bounds.Filter([位置]) = 1)
结尾
别的
开始
选择 [ID], [名称], [类型], [数据], [MinLOD], [MaxLOD], [Location].[Lat] AS [Latitude], [Location].[Long] AS [Longitude], [来源ID]
来自 [兴趣点]
在哪里
不是 ((@maxLOD [MaxLOD])) 和
(@bounds.STIntersects([位置]) = 1)
结尾
结尾
“POI”表在 MinLOD、MaxLOD 上有一个索引,在 Location 上有一个空间索引。