Я написал хранимую процедуру, которая вчера обычно выполнялась менее чем за секунду. Сегодня это занимает около 18 секунд. Я вчера столкнулся с проблемой, и она, казалось, была решена путем удаления и повторного создания хранимой процедуры. Сегодня этот трюк не работает. (
Интересно, что если я скопирую тело хранимой процедуры и выполню ее как простой запрос, он быстро завершится. Кажется, это тот факт, что это хранимая процедура, которая замедляет ее ...!
Кто-нибудь знает, в чем может быть проблема? Я искал ответы, но часто они рекомендуют запускать его через Query Analyzer, но у меня его нет - сейчас я использую SQL Server 2008 Express.
Хранимая процедура выглядит следующим образом:
ALTER PROCEDURE [dbo].[spGetPOIs]
@lat1 float,
@lon1 float,
@lat2 float,
@lon2 float,
@minLOD tinyint,
@maxLOD tinyint,
@exact bit
AS
BEGIN
-- Create the query rectangle as a polygon
DECLARE @bounds geography;
SET @bounds = dbo.fnGetRectangleGeographyFromLatLons(@lat1, @lon1, @lat2, @lon2);
-- Perform the selection
if (@exact = 0)
BEGIN
SELECT [ID], [Name], [Type], [Data], [MinLOD], [MaxLOD], [Location].[Lat] AS [Latitude], [Location].[Long] AS [Longitude], [SourceID]
FROM [POIs]
WHERE
NOT ((@maxLOD [MaxLOD])) AND
(@bounds.Filter([Location]) = 1)
END
ELSE
BEGIN
SELECT [ID], [Name], [Type], [Data], [MinLOD], [MaxLOD], [Location].[Lat] AS [Latitude], [Location].[Long] AS [Longitude], [SourceID]
FROM [POIs]
WHERE
NOT ((@maxLOD [MaxLOD])) AND
(@bounds.STIntersects([Location]) = 1)
END
END
Таблица POI имеет индекс MinLOD, MaxLOD и пространственный индекс Location.