我们有两个表,其中存储了多边形几何。我想获取一个表中存在的多边形而不存在于另一个表中。到目前为止,我正在做一个左外连接并使用STAsText()但它需要花费大量时间..仅供参考,我们有1.2亿个多边形在两个表中。有一种快速的提取方式吗? (可能正在使用空间索引,我不知道这一点)。
仅供参考,我使用的是SQL Server 2012
答案 0 :(得分:2)
这应该做:
select a.*
from dbo.newPolygon as a
left join dbo.OldPolygon as b
on a.Shape.STEquals(b.Shape) = 1
where b.ID is null
如果两个表中的Shape列都有空间索引,则它应该支持此查询。来自文档:
空间索引在某些条件下支持以下面向集合的几何方法:STContains(),STDistance(), STEquals(),STIntersects(),STOverlaps(),STTouches()和STWithin ()。要得到空间索引的支持,必须在查询的WHERE或JOIN ON子句中使用这些方法,并且它们必须出现在以下常规形式的谓词中:
geometry1。 method_name(geometry2)comparison_operator valid_number
(强调我的)因为事实上我们按照文档中指定的方式使用STEquals(),所以我们应该很高兴。