У меня есть две таблицы MS SQL Server ( v11.0 ) с типами данных Geometry. У одного ~ 8000 точечных записей, у другого ~ 100 многоугольных записей.
Обе таблицы имеют пространственные индексы в соответствующем столбце геометрии, и обе используют один и тот же SRID.
Для указанной цели отчетности мне нужно извлечь список имен всех точек с именем многоугольника, внутри которого он лежит. Все точки находятся в пределах один от полигонов. Полигоны не перекрываются.
Я использую этот запрос:
SELECT points.point_label, polygons.polygon_label
FROM
points WITH (NOLOCK) INNER JOIN
polygons WITH (NOLOCK) ON
polygons.polygon_geometry.STContains(points.point_geometry) = 1
Работает, но очень медленно возвращает все ~ 8000 точек строк с меткой, содержащей полигон.
Есть ли более эффективный способ присоединиться к ним для достижения желаемого результата? Разве SQL Server не очень хорош для вычисления геометрических элементов по наборам данных?
Большинство примеров кода, которые я вижу, включают в себя переменную типа geometry с одним оперируемым значением.