【问题标题】:Spatial query - poor performance, not using index空间查询 - 性能差,不使用索引
【发布时间】:2012-07-03 21:51:28
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

  • 我确实做到了.. 使用 STBuffer。
猜你喜欢
  • 1970-01-01
  • 2013-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多