У меня есть столбец типа география.Я создал пространственный индекс, но он не используется:
declare @geog geography
select @geog = 'POINT (18.12 -33.2)'
select *
from dbo.product WITH(INDEX(IX_Spatial))
where
@geog.STDistance(GeoLocation) > 1000
Индекс создается следующим образом:
CREATE SPATIAL INDEX [IX_Spatial] ON [dbo].[Product]
(
[GeoLocation]
)USING GEOGRAPHY_GRID
WITH (
GRIDS =(LEVEL_1 = MEDIUM,LEVEL_2 = MEDIUM,LEVEL_3 = MEDIUM,LEVEL_4 = MEDIUM),
CELLS_PER_OBJECT = 1024,
PAD_INDEX = OFF, SORT_IN_TEMPDB = OFF,
DROP_EXISTING = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
Значения плотности сетки на разных уровнях предназначены для ненамеренно установлен на средний.Не имеет значения, что я им установил. Если я просматриваю примерный план выполнения, индекс не используется.
[http://blogs.msdn.com/b/isaac/archive/2008/08/29/is-my-spatial-index-being-used.aspx][1]
Если я пытаюсь добавить подсказку оптимизатору запросов
declare @geog geography
select @geog = 'POINT (18.12 -33.2)'
select *
from dbo.product WITH(INDEX(IX_Spatial))
where
@geog.STDistance(GeoLocation) > 1000
Я получаю эту ошибку:
Обработчику запросов не удалось создать план запроса для запроса с подсказкой пространственного индекса.Причина: пространственные индексы не поддерживают компаратор, предоставленный в предикате
Моя база данных работает на уровне совместимости с SQL Server 2008 (100).
.