【发布时间】:2012-06-18 18:24:37
【问题描述】:
我使用空间索引,当我尝试执行WHERE 语句时:
WHERE T.GEOMETRY.STIntersects(O.GEOMETRY) = 1 AND T.GEOMETRY.STTouches(O.GEOMETRY) = 0
它工作正常,但是当我尝试使用 OR 执行时:
WHERE T.GEOMETRY.STOverlaps(O.GEOMETRY) = 1 OR T.GEOMETRY.STWithin(O.GEOMETRY) = 1
我得到这个错误:
查询处理器无法为具有 空间索引提示。原因:找不到所需的二进制空间 条件下的方法。尝试删除索引提示或删除 SET 强制计划。
任何帮助,这个语句有什么问题?
【问题讨论】:
-
因此,错误消息暗示了空间索引提示。您是否试图通过执行“from tbl with (index(idx_spatial))”之类的操作来强制优化器使用?
-
是的,我正在使用“FROM Table WITH (INDEX (spatial_index))”。我不明白这个错误,为什么它适用于 AND 但不适用于 OR。
-
我不知道,但是服务器显然对你试图规避它通常会做的事情感到愤怒。放弃索引提示:它们通常是为您真正知道自己在做什么时保留的(不是说您是新手,但很少有人比优化器更聪明)。
-
不,这是不同的错误:“在某个条件下找不到所需的二进制空间方法”
标签: sql-server tsql geospatial spatial-index