2012-06-18 3 views
5

Я использую индекс Spatial и когда я пытаюсь выполнить 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

Таким образом, сообщение об ошибке ссылается на подсказку пространственного индекса. Вы пытаетесь заставить руку оптимизатора сделать что-то вроде «from tbl with (index (idx_spatial))»? –

+0

Да, я использую «FROM Table WITH (INDEX (пространственный_индекс))». Я не понимаю эту ошибку, почему она работает с AND, но не с OR. – Nenad

+2

Я не знаю, но сервер явно злится на ваши попытки обойти то, что он обычно будет делать. Отметьте подсказку индекса: их обычно резервируют, когда вы действительно знаете, что делаете (не говорите, что вы новичок, но редко кто-то умнее оптимизатора). –

ответ

1

Общее решение проблем с OR-запросами (как правило, производительность) - это их разделение и использование СОЮЗА ВСЕ между ними. Обычно это делается в подзапросе или в выражении Common table.

Если вы могли бы написать больше своего запроса и, желательно, соответствующую схему таблицы, то я могу уточнить свой ответ с более подробным ответом.