6

我正在尝试制定最有效的查询来获取给定点半径内的点。结果不必非常准确,因此我更喜欢速度而不是准确性。

我们尝试使用 where 子句比较使用 STDistance 的点的距离,如下所示(其中 @point 和 v.GeoPoint 是地理类型):

WHERE v.GeoPoint.STDistance(@point) <= @radius

还有一个使用类似于此的 STIntersects:

WHERE @point.STBuffer(@radius).STIntersects(v.GeoPoint) = 1

这些查询中的任何一个是首选还是我错过了其他功能?

4

1 回答 1

3

如果准确性不是最重要的,那么使用过滤器功能可能是一个好主意:http: //msdn.microsoft.com/en-us/library/cc627367.aspx

在很多情况下,这可能会快几个数量级,因为它不会检查您的匹配是否准确。在索引中,数据以网格模式存储,因此这种方法的可行性可能取决于您的空间索引选项。

此外,如果您不需要很多匹配,那么先进行过滤,然后进行完全相交可能是可行的。

于 2011-06-20T07:58:53.433 回答