使用sql server空间获取点半径内的点的最有效方法
我正在尝试找出最有效的查询来获取给定点半径内的点。结果不必非常准确,因此我更看重速度而不是准确性。
我们尝试使用 where 子句使用 STDistance 来比较点的距离,如下所示(其中 @point 和 v.GeoPoint 是地理类型):
WHERE v.GeoPoint.STDistance(@point) <= @radius
还有一个使用 STIntersects 的方法与此类似:
WHERE @point.STBuffer(@radius).STIntersects(v.GeoPoint) = 1
是首选这些查询还是还有另一个函数错过了?
I am trying to work out the most efficient query to get points within a radius of a given point. The results do not have to be very accurate so I would favor speed over accuracy.
We have tried using a where clause comparing distance of points using STDistance like this (where @point and v.GeoPoint are geography types):
WHERE v.GeoPoint.STDistance(@point) <= @radius
Also one using STIntersects similar to this:
WHERE @point.STBuffer(@radius).STIntersects(v.GeoPoint) = 1
Are either of these queries preferred or is there another function that I have missed?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果准确性不是最重要的,那么使用 Filter 函数可能是一个好主意:
http://msdn.microsoft.com/en-us/library/cc627367.aspx
在很多情况下,这可以快几个数量级,因为它不会检查您的匹配是否准确。
在索引中,数据以网格模式存储,因此这种方法的可行性可能取决于您的空间索引选项。
另外,如果您不需要很多匹配,那么首先进行过滤,然后进行完全相交可能是可行的。
If accuracy is not paramount then using the Filter function might be a good idea:
http://msdn.microsoft.com/en-us/library/cc627367.aspx
This can i many cases be orders of magnitude faster because it does not do the check to see if your match was exact.
In the index the data is stored in a grid pattern, so how viable this approach is probably depends on your spatial index options.
Also, if you don't have to many matches then doing a filter first, and then doing a full intersect might be viable.