我似乎无法让 SQL Server 利用对象上的基本空间索引GEOGRAPHY
来执行最简单的查询。
这里是dbfiddle.uk 复制版GEOGRAPHY
,演示了如何创建一个带有名为 的列的简单表Coordinates
,向该表添加 1 个带有多边形的行,然后在该Coordinates
列上创建空间索引。
该查询看起来应该是 SARGable,但我仍然得到聚集索引扫描,而不是在空间索引上进行非聚集索引查找:
如果我尝试强制索引提示,我会收到经典错误:
消息 8635,级别 16,状态 4,第 15 行
查询处理器无法为带有空间索引提示的查询生成查询计划。原因:空间索引不支持谓词中提供的比较器。尝试删除索引提示或删除 SET FORCEPLAN。
因此,并不是 SQL Server 认为聚集索引扫描性能更高,而是它甚至无法为空间索引提出查询计划。
根据微软关于空间索引的文档,该STDistance()
函数应该适用于空间索引可优化的谓词:
空间索引支持以下谓词形式:
- 地理1.STDistance(地理2) <= 数字
我是不是太笨了?