【发布时间】: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
【问题讨论】:
-
为什么在 StDistance 子句中除以 1000?这可以在别处计算吗?
-
更改为 WHERE Coordinates.STDistance(geography::STPointFromText('POINT(-113.512245 51.498212)', 4326))
标签: sql-server sql-server-2008 spatial