SQL Server在Geometry属性上连接表非常慢 - 这是最有效的方法吗?

问题描述 投票:2回答:1

我有两个带有Geometry数据类型的MS SQL Server(v11.0)表。一个有~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是不是很擅长计算数据集的几何内容?我看到的大多数代码示例都涉及一个几何类型变量,其中一个值被操作。

sql sql-server geometry sql-server-2014
1个回答
1
投票

这完全是一个SWAG,但根据您对数据的描述,我会尝试这样做:

SELECT points.point_label, p.polygon_label FROM points outer apply ( select top(1) polygon_label from polygons where polygons.polygon_geometry.STContains(points.point_geometry) = 1 ) as p

您正在授予SQL权限以停止查看它最多找到一个包含该点的多边形。

注意:我将此作为答案而不是评论发布的唯一原因是格式和帖子的长度。这可能行不通!

© www.soinside.com 2019 - 2024. All rights reserved.