比较多边形几何类型的最快方法

时间:2015-03-11 12:37:12

标签: sql sql-server

我们有两个表,其中存储了多边形几何。我想获取一个表中存在的多边形而不存在于另一个表中。到目前为止,我正在做一个左外连接并使用STAsText()但它需要花费大量时间..仅供参考,我们有1.2亿个多边形在两个表中。有一种快速的提取方式吗? (可能正在使用空间索引,我不知道这一点)。

仅供参考,我使用的是SQL Server 2012

1 个答案:

答案 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(),所以我们应该很高兴。