昨日、通常1秒以内に完了するストアドプロシージャを作成しました。今日は約18秒かかります。昨日も問題が発生しましたが、ストアドプロシージャを削除して再作成することで解決したようです。今日、そのトリックは機能していないようです。:(
興味深いことに、ストアドプロシージャの本体をコピーして、簡単なクエリとして実行すると、すぐに完了します。速度を低下させているのはストアドプロシージャであるという事実のようです...!
誰かが問題が何であるか知っていますか?回答を検索しましたが、Query Analyserを使用して実行することを推奨することがよくありますが、それはありません。現在、SQL Server2008Expressを使用しています。
ストアドプロシージャは次のとおりです。
ALTERPROCEDURE[dbo]。[spGetPOIs]
@ lat1フロート、
@ lon1フロート、
@ lat2フロート、
@ lon2フロート、
@minLOD tinyint、
@maxLOD tinyint、
@exactビット
なので
始める
-クエリ長方形をポリゴンとして作成します
@boundsgeographyを宣言します。
SET @bounds = dbo.fnGetRectangleGeographyFromLatLons(@ lat1、@ lon1、@ lat2、@ lon2);
-選択を実行します
if(@exact = 0)
始める
SELECT [ID]、[Name]、[Type]、[Data]、[MinLOD]、[MaxLOD]、[Location]。[Lat] AS [Latitude]、[Location]。[Long] AS [Longitude]、[ SourceID]
[POI]から
どこ
NOT((@maxLOD [MaxLOD]))AND
(@ bounds.Filter([Location])= 1)
終わり
そうしないと
始める
SELECT [ID]、[Name]、[Type]、[Data]、[MinLOD]、[MaxLOD]、[Location]。[Lat] AS [Latitude]、[Location]。[Long] AS [Longitude]、[ SourceID]
[POI]から
どこ
NOT((@maxLOD [MaxLOD]))AND
(@ bounds.STIntersects([Location])= 1)
終わり
終わり
'POI'テーブルには、MinLOD、MaxLODのインデックス、およびLocationの空間インデックスがあります。