Используя следующиеСоветы по пространственному индексу не работают в SQL Server 2008?
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, но, безусловно, для этого есть работа?
Я добавил снимок экрана. Как указано, форсирование подсказки не работает, и сгенерированный план показывает, что горло бутылки в значительной степени ограничено фильтром, и я не могу обойтись. – tpcolson