2012-06-18 18 views
5

Io uso indice spaziale e quando provo ad eseguire WHERE dichiarazione:errore quando si utilizza indice spaziale in SQL Server

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

Funziona bene, ma quando provo ad eseguire con OR:

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

ottengo questo errore:

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.

Qualsiasi aiuto, quello che è un problema in questa affermazione?

+0

Quindi, il messaggio di errore allude a un suggerimento di indice spaziale. Stai cercando di forzare la mano dell'ottimizzatore facendo qualcosa del tipo "da tbl con (index (idx_spatial))"? –

+0

Sì, sto usando "FROM Table WITH (INDEX (spatial_index))". Non capisco questo errore, perché funziona con AND ma non con OR. – Nenad

+2

Non lo so, ma il server è ovviamente arrabbiato con i tuoi tentativi di eludere ciò che normalmente farebbe. Elimina il suggerimento indice: in genere sono riservati a quando sai veramente cosa stai facendo (non dicendo che sei un novellino, ma è raro che qualcuno sia più intelligente dell'ottimizzatore). –

risposta

1

Una soluzione generale per problemi con le query OR (in genere le prestazioni) è separarli e utilizzare UNION ALL tra allora. In genere ciò viene eseguito in una sottoquery o un'espressione di tabella comune.

Se è possibile pubblicare più query e preferibilmente lo schema della tabella pertinente, è possibile aggiornare la risposta con una risposta più dettagliata.

Problemi correlati