오류

2012-06-18 1 views
5

나는 공간 인덱스를 사용하고 난 WHERE 문을 실행하려고하면오류

WHERE T.GEOMETRY.STIntersects(O.GEOMETRY) = 1 AND T.GEOMETRY.STTouches(O.GEOMETRY) = 0 

그것은 잘 작동하지만 내가 할 때와 실행하거나 :

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)"를 사용하여 "from tbl"과 같은 작업을 수행하여 옵티 마이저의 손을 강제 실행하려고합니까? –

+0

예, "FROM TABLE WITH (INDEX (spatial_index))"를 사용하고 있습니다. 이 오류를 이해할 수 없으며 OR이 아닌 AND와 함께 작동하는 이유는 무엇입니까? – Nenad

+2

잘 모르겠지만 서버는 일반적으로하는 일을 회피하려는 시도에 분명히 분노하고 있습니다. 인덱스 힌트를 버리십시오. 일반적으로 자신이 수행하는 작업을 실제로 알 때 (즉, 신참이라고 말하면서도 옵티마이 저보다 더 똑똑한 사람은 드뭅니다) 예약 된 것입니다. –

답변

1

OR 쿼리 (일반적으로 성능)와 관련된 일반적인 해결책은 이들을 구분하고 UNION ALL을 사용하는 것입니다. 일반적으로이 작업은 하위 쿼리 또는 공통 테이블 식에서 수행됩니다.

더 많은 쿼리 및 관련 테이블 스키마를 게시 할 수 있으면보다 자세한 대답으로 내 대답을 업데이트 할 수 있습니다.