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

时间:2012-07-03 12:52:17

标签: sql-server sql-server-2008 spatial

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

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

大部分时间(约86%)用于计算距离的过滤器 - 所以我正在寻找一种优化方法,我需要一些帮助..

我正在使用的查询是:

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

1 个答案:

答案 0 :(得分:0)

一种古老的方法是使用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,这是您提出的问题。