T-SQL中的过滤器几何函数不精确,不会返回有效结果

时间:2018-01-30 07:01:27

标签: sql-server graph geometry

我有两张表,edges(一组折线功能)和nodes(点数集)

我想找到" id "那些与任何边缘的第一个点相交的点。我在SQL中使用了STIntersects()函数并写下了以下脚本:

select EdgeTable.id, NodeTable.idj, 
from EdgeTable inner join NodeTable
ON NodeTable.GeomJ.STIntersects(EdgeTable.StartPointG) =1

此代码正常运行,但问题在于其性能。事实上,EdgeTable和NodeTable有大约200万条记录,上述脚本的执行时间大约是55分钟,这对我的工作来说根本不适合。

因此,我发现了Filter几何函数,这似乎是改善此任务性能的一个很好的解决方案。在这方面,首先我在我的表上创建了空间索引,然后使用如下函数:

select EdgeTable.id, NodeTable.idj,
from EdgeTable inner join NodeTable
ON NodeTable.GeomJ.Filter(EdgeTable.StartPointG) =1

但是这个函数返回完全错误的结果。例如,我测试了边缘1(idj = 1)的脚本,该边缘的起点与节点1相交,this是STIntersects()函数的结果,而this是Filter的结果。由于对滤波器几何函数的描述,它指出这种方法不是确定性的并且不精确。因此,为什么这两个函数的结果不同,我怎么能想出来呢?

0 个答案:

没有答案