私は 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)
しかし、実際には実行に時間がかかります。このクエリのパフォーマンスを改善するにはどうすればよいですか?
ありがとう