Почему пространственные запросы требуют больше времени для пространственного индекса в SQL Azure, когда я уменьшаю свой радиус? - PullRequest
1 голос
/ 18 ноября 2011

Я недавно начал видеть это странное поведение, в результате которого пространственный поиск приводит к ухудшению восприятия, поскольку я уменьшаю мой радиус.Вчера вечером я сбросил и перестроил свой пространственный индекс, но тот же странный результат.

Любая помощь будет принята.

Справочная информация:

Table size = ~360K rows
Table = {ID, Location (geography)}

Например Выполнение запроса с помощью Radius= 20000 занимает 1 секунду, но уменьшение Радиуса = 1000 все еще выполняется через 3 минуты.

Запрос:

DECLARE @x geography
SET @x = geography::Point(47.5302778, -122.0313889, 4326)

SELECT TOP (25) L.RID, L.Location.STDistance(@x) AS DIST 
FROM Location L
WHERE L.Location.STDistance(@x) <= @Radius

Индекс:

При щелчке правой кнопкой мыши по индексу я получаю следующее(Я понимаю, что PAD-iNDEX не поддерживается в SQL Azure и т. Д., Но просто копирую дословно то, что дает мне SQL Management Studio)

CREATE SPATIAL INDEX [SPATIAL_Search_Location] ON [dbo].[Search] 
(
 [Location]
)USING  GEOGRAPHY_GRID 
WITH (
GRIDS =(LEVEL_1 = MEDIUM,LEVEL_2 = MEDIUM,LEVEL_3 = MEDIUM,LEVEL_4 = MEDIUM), 
CELLS_PER_OBJECT = 16, PAD_INDEX  = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) 

1 Ответ

1 голос
/ 25 ноября 2011

Это как-то связано с эффективностью индекса?

Недавно я обнаружил встроенную функцию sp_help_spatial_geography_index в MS SQL 2008, и она изменила способ создания пространственных индексов.

Вы можете обнаружить, что при использовании меньшей области поиска лучшим индексом может быть Med, Med, High, High.Или вариация на него.

Кроме того, я уже говорил это раньше, и, должно быть, стоит сказать это снова ... используйте подсказку!

SELECT TOP (25) L.RID, L.Location.STDistance(@x) AS DIST  
FROM Location L WITH(INDEX([SPATIAL_INDEX_NAME]))
WHERE 
L.Location.STDistance(@x) <= @Radius 
...