Используя следующее
SELECT *
FROM dbo.GRSM_WETLAND_POLY
CROSS APPLY (SELECT TOP 1 Name, shape
FROM GRSM.dbo.GRSM_Trails --WITH(index(S319_idx))
WHERE GRSM_Trails.Shape.STDistance(dbo.GRSM_WETLAND_POLY.Shape) IS NOT NULL
ORDER BY GRSM_Trails.Shape.STDistance(dbo.GRSM_WETLAND_POLY.Shape) ASC) fnc
работает очень медленно на 134 строках (56 секунд), однако, если указатель индекса не прокомментирован, он возвращает
Msg 8635, уровень 16, состояние 4, строка 3
Обработчику запросов не удалось создать план запроса с подсказкой пространственного индекса. Причина: пространственные индексы не поддерживают компаратор, указанный в предикате. Попробуйте удалить подсказки индекса или удалить SET FORCEPLAN.
План выполнения показывает стоимость фильтра на уровне 98%, он запрашивает 1400 строк в другой таблице, поэтому общая стоимость составляет 134 * 1400 индивидуальных поисков, что и есть задержка. Сами по себе пространственные индексы в каждой таблице работают отлично, без фрагментации, с 99% -ной полнотой страниц и с использованием среды для всех 4 уровней сетки с 16 ячейками на объект. Изменение свойств пространственного индекса в любой таблице не повлияло на производительность.
Документация предполагает, что подсказки пространственного индекса могут использоваться только в запросах в SQL Server 2012, но, конечно же, есть способ обойти это?