2012-06-18 36 views
5

我使用空間索引,當我嘗試執行WHERE聲明:錯誤在SQL Server中使用空間索引時

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 

我得到這個錯誤:

The query processor could not produce a query plan for a query with a spatial index hint. Reason: Could not find required binary spatial method in a condition. Try removing the index hints or removing SET FORCEPLAN.

任何幫助,什麼是這種說法有問題嗎?

+0

因此,錯誤消息暗指空間索引提示。您是否試圖通過執行類似「從(index(idx_spatial))」的tbl來強制優化器的手? –

+0

是的,我正在使用「FROM TABLE WITH(INDEX(spatial_index))」。我不明白這個錯誤,爲什麼它與AND協同工作,而不是與OR協同工作。 – Nenad

+2

我不知道,但服務器顯然很生氣,試圖繞過它通常會做的事情。提示索引提示:當你真正瞭解自己在做什麼時(通常不是說你是菜鳥,但很少有人比優化者更聰明),它們通常是保留的。 –

回答

1

OR查詢(通常爲性能)問題的一般解決方案是將它們分開,然後在之間使用UNION ALL。這通常是在子查詢或公用表表達式中完成的。

如果你可以發佈更多的查詢,最好是相關的表格模式,那麼我可以用更詳細的答案更新我的答案。