空间查询 - 性能不佳,未使用索引



我正在尝试查找距离给定坐标一定距离内的位置。在具有大约 32k 条记录的表上,查询大约需要 2 秒 - 这太慢了,imo。

它正在执行聚簇索引扫描,这是合乎逻辑的 - 它必须计算每个位置的距离。但是,我仍然认为这应该比这么小的数据集更快。我确实定义了空间索引,但是没有使用它,如果我强制使用,查询将失败。

大部分时间(~86%)都花在计算距离的过滤器上 - 所以我正在寻找一种优化它的方法,我在这里需要一些帮助。

我正在使用的查询是这样的:

SELECT Name
FROM Venue
WHERE (Coordinates.STDistance(geography::STPointFromText('POINT(-113.512245 51.498212)', 4326)) / 1000) <= 100 

一种古老的方法是使用 BOX firxt。

从你的角度来看,在盒子的两端做两个点。 +R/+R 和 -R/-R 从中心开始。

然后你可以过滤 - 一个点必须在这个框中和你描述的圆圈中。

框检查可以在索引上运行并杀死大多数元素。

简单的学校几何。你在你描述的圆周围画一个矩形框。

您当前的方法无法使用索引,因为索引不包含字段。

或者:画一个圆 - 不要使用距离计算。画一个圆。用积分。

或者阅读 https://stackoverflow.com/questions/11311363/my-application-is-about-asp-net-using-linq-and-remote-mssql-my-connection-is-be 这是您问的相同问题。

最新更新