2012-06-18 27 views
5

utilizo índice espacial y cuando intento ejecutar WHERE declaración:de error cuando se utiliza índice espacial en SQL Server

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

Funciona bien, pero cuando trato de ejecutar con OR:

WHERE T.GEOMETRY.STOverlaps(O.GEOMETRY) = 1 OR T.GEOMETRY.STWithin(O.GEOMETRY) = 1 

consigo este error:

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.

Cualquier ayuda, lo que es un problema en esta declaración?

+0

Por lo tanto, el mensaje de error alude a una sugerencia de índice espacial. ¿Está intentando forzar la mano del optimizador haciendo algo como "de tbl with (index (idx_spatial))"? –

+0

Sí, estoy usando "FROM Table WITH (INDEX (spatial_index))". No entiendo este error, ¿por qué funciona con AND pero no con OR? – Nenad

+2

No lo sé, pero el servidor está obviamente enojado por tus intentos de eludir lo que normalmente haría. Elimine la pista del índice: por lo general, están reservados para cuando realmente sabe lo que está haciendo (sin decir que es un novato, pero es raro que alguien sea más inteligente que el optimizador). –

Respuesta

1

Una solución general para problemas con consultas OR (normalmente rendimiento) es separarlos y usar UNION ALL entre entonces. Esto normalmente se haría en una subconsulta o una expresión de tabla común.

Si pudiera publicar más de su consulta, y preferiblemente el esquema de la tabla correspondiente, entonces puedo actualizar mi respuesta con una respuesta más detallada.

Cuestiones relacionadas