Я использую 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)
Но на самом деле это займет гораздо больше времени исполнения, может кто-нибудь сказать мне, как я могу улучшить производительность этого запроса?
Благодаря
Каким будет пример предложения where? – roemhildtg
Боюсь, я забыл, что я думал три года назад, но, вероятно, что-то вроде 'WHERE LastLocation.STDistance (@Location) <10000'. –