4

私は Microsoft SQL Server 2012 を使用しており、特定のポイントに最も近い順に上位 50 人のユーザーを選択する単純なクエリがあります。例:

DECLARE @Location geography = geography::Point(30.9384016, 29.9582148, 4326)

SELECT TOP 50 * 
FROM Users  
ORDER BY LastLocation.STDistance(@Location)

実行計画を見ると、空間インデックスが使用されていないことがわかります

ここに画像の説明を入力

テーブルには約 40,000 レコードが含まれており、クエリの実行には 1 分以上かかります。空間インデックスは次のように作成されます。

create spatial index IX_Location ON Users (LastLocation) using GEOGRAPHY_AUTO_GRID

クエリでヒントを使用して、次のようにインデックスを指定しようとしました。

DECLARE @Location geography = geography::Point(30.9384016, 29.9582148, 4326)

SELECT TOP 50 * 
FROM Users WITH (INDEX(IX_Location)) 
WHERE LastLocation.STDistance(@Location) IS NOT NULL 
ORDER BY LastLocation.STDistance(@Location)

しかし、実際には実行に時間がかかります。このクエリのパフォーマンスを改善するにはどうすればよいですか?

ありがとう

4

1 に答える 1