我写了一个存储过程,昨天,它通常在一秒钟内完成。今天,大约需要 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 上有一个空间索引。