As seguintes regras se aplicam caso deseje otimizar consultas espaciais utilizando predicados espaciais:
WHERE db2gse.ST_Within(c.location,:BayArea)=1
WHERE db2gse.ST_Within(c.location,:BayArea)=1
A Tabela 4 mostra as maneiras corretas e incorretas de criar consultas espaciais para explorar o índice espacial.
Tabela 4. Regras para exploração de índice
Consulta espaciais | Regras violadas |
---|---|
SELECT * FROM customers c WHERE db2gse.ST_Within(c.location,:BayArea)=1 | Nenhuma condição é violada neste exemplo. |
SELECT * FROM customers c WHERE db2gse.ST_Distance(c.location,:SanJose)<10 | Nenhuma condição é violada neste exemplo. |
SELECT * FROM customers c WHERE db2gse.ST_Length(c.location)>10 | ST_Length não é um predicado espacial. |
SELECT * FROM customers c WHERE 1=db2gse.ST_Within(c.location,:BayArea) | O predicado deve estar do lado esquerdo da comparação. |
SELECT * FROM customers c WHERE db2gse.ST_Within(c.location,:BayArea)=2 | Comparações de igualdade devem usar o inteiro constante 1. |
SELECT * FROM customers c WHERE db2gse.ST_Within(:SanJose,:BayArea)=1 | Deve ser uma coluna espacial usada no predicado como a pesquisa de destino, e deve ser um índice espacial criado naquela coluna. (SanJose e BayArea não são colunas espaciais e portanto, não podem ter um índice espacial associado às mesmas.) |