【发布时间】:2014-01-17 15:40:37
【问题描述】:
我想使用空间索引提示查询到更多不同点的最近记录。如果我在它们之间加上“和”(如第一个块),就没有问题。但如果我使用“或”(如第二个块),我会收到错误消息:
查询处理器无法为带有空间索引提示的查询生成查询计划。原因:找不到所需的比较谓词。尝试删除索引提示或删除 SET FORCEPLAN。
怎么了?有没有替代的解决方案?
第一个区块:
SELECT
[Id],[Geocode]
FROM
[dbo].[Companies] with (INDEX(SpatialIndex_GeoCode))
WHERE
([Geocode].STDistance(geography::Point(42.7085, -74.9456, 4326)) < 8046.72)
and ([Geocode].STDistance(geography::Point(42.7085, -74.9456, 4326)) < 18046.72)
第二块:
SELECT
[Id],[Geocode]
FROM
[dbo].[Companies] with (INDEX(SpatialIndex_GeoCode))
WHERE
([Geocode].STDistance(geography::Point(42.7085, -74.9456, 4326)) < 8046.72)
OR ([Geocode].STDistance(geography::Point(42.7085, -74.9456, 4326)) < 18046.72)
【问题讨论】:
-
请解释为什么不能删除索引提示
-
因为性能。在没有提示的情况下运行查询时,不使用索引。所以查询运行很慢
-
我发布了一个包含提示的答案。它的性能是否足够?
标签: sql sql-server sql-server-2012