Applicare le seguenti regole se si desidera ottimizzare le interrogazioni spaziali che utilizzano i predicati spaziali:
WHERE db2gse.ST_Within(c.location,:BayArea)=1
WHERE db2gse.ST_Within(c.location,:BayArea)=1
La Tabella 4 indica i metodi di creazione delle interrogazioni spaziali corretti e quelli non validi per l'impostazione dell'indice spaziale.
Tabella 4. Regole per l'impostazione dell'indice
Interrogazione spaziale | Regola violata |
---|---|
SELECT * FROM customers c WHERE db2gse.ST_Within(c.location,:BayArea)=1 | Nessuna condizione è stata violata in questo esempio. |
SELECT * FROM customers c WHERE db2gse.ST_Distance(c.location,:SanJose)<10 | Nessuna condizione è stata violata in questo esempio. |
SELECT * FROM customers c WHERE db2gse.ST_Length(c.location)>10 | Il predicato deve essere utilizzato nella clausola WHERE. (ST_Length è una funzione spaziale, ma non un predicato.) |
SELECT * FROM customers c WHERE 1=db2gse.ST_Within(c.location,:BayArea) | Il predicato deve trovarsi nella parte sinistra del confronto. |
SELECT * FROM customers c WHERE db2gse.ST_Within(c.location,:BayArea)=2 | I confronti di uguaglianza devono utilizzare la costante integer 1. |
SELECT * FROM customers c WHERE db2gse.ST_Within(:SanJose,:BayArea)=1 | Il predicato deve presentare una colonna spaziale utilizzata come destinazione di ricerca e un indice spaziale creato in questa colonna. (SanJose e BayArea non sono colonne spaziali e quindi non possono essere associati a un indice spaziale.) |