2013-08-20 110 views
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) 

縱觀執行計劃中,我可以看到,它沒有使用我的空間索引

enter image description here

表包含大約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) 

但實際上,它需要更多的時間執行,可能會有人告訴我,我怎麼能提高性能這個查詢?

感謝

回答

1

添加WHERE子句限制的距離。

+0

where子句的例子是什麼? – roemhildtg

+1

恐怕我忘了三年前我在想什麼,但可能像'WHERE LastLocation.STDistance(@Location)<10000'。 –