2012-05-22 5 views
0

수천 개의 행이있는 테이블이있는 데이터베이스가있는 SQL Server 2008R2가 있습니다. 난 서버가 빠른이 쿼리를 실행 시작하면이 쿼리를 실행하기가 매우 느려질 몇 분 후SQL Server 2008 R2는 시작부터 몇 분 후에 느려집니다.

SELECT idEvent, geography::STGeomFromText('POINT(' + @userLongitude + ' ' +  @userLatitude + ')', 4326).STDistance([Coordinates]) as distance 
FROM EventCoords 
INNER JOIN Event ON EventCoords.idEvent = Event.id 
WHERE DAY(start_time)=DAY(@timeMax) AND MONTH(start_time)=MONTH(@timeMax)AND 
YEAR(start_time)=YEAR(@timeMax) and 
geography::STGeomFromText('POINT(' + @userLongitude + ' ' + @userLatitude + ')', 4326).STDistance([Coordinates]) < @maxDistance 

: getEventsByRange이 기능입니다

exec sp_executesql N'SELECT *, [t0].[distance] AS [Meters], @p4 AS [ToWhat] 
FROM [dbo].[getEventsByRange](@p0, @p1, @p2, @p3) AS [t0] 
LEFT JOIN [dbo].[Event] AS [t1] ON [t0].[idEvent] = [t1].[id] 
ORDER BY [t0].[distance]',N'@p0 var 

. 문제가 어디에 있습니까? 왜 서버가 캐시 된 쿼리를 빠르게하지 않았습니까?

+0

옵션 (RECOMPILE) – buckley

답변

0

매개 변수 스니핑으로 인해 최적이 아닌 캐시 된 실행 계획을 다시 사용할 수 있습니까? 이 쿼리의 마지막에 케이스와 OPTION (RECOMPILE) 인 경우

은 참조하십시오 :

ORDER BY [t0].[distance] 
OPTION (RECOMPILE) 

쿼리가있을 경우 우리가 더 좋은 권고를 할 수 확대됨에 (따라서 문제는 매개 변수 스니핑)

+0

을 시도 할 기회가 있었습니까? @Marco OPTION (RECOMPILE)이 문제를 해결 했습니까? 매개 변수 스니핑보다. 이 절을 추가하면 실행 계획 캐싱이 비활성화되므로 성능 저하가 발생할 수 있습니다. 귀하의 연구와 효과에 대해 알고 있었습니까? 그렇지 않으면 나는 그것에 깊이 갈 수있다. – buckley