Las siguientes reglas sirven para optimizar las consultas espaciales que utilizan predicados espaciales:
WHERE db2gse.ST_Within(c.location,:BayArea)=1
WHERE db2gse.ST_Within(c.location,:BayArea)=1
La Tabla 4 muestra formas correctas e incorrectas de crear consultas espaciales para aprovechar el índice espacial.
Tabla 4. Reglas para el aprovechamiento del índice
Consulta espacial | Regla violada |
---|---|
SELECT * FROM customers c WHERE db2gse.ST_Within(c.location,:BayArea)=1 | En este ejemplo no se viola ninguna condición. |
SELECT * FROM customers c WHERE db2gse.ST_Distance(c.location,:SanJose)<10 | En este ejemplo no se viola ninguna condición. |
SELECT * FROM customers c WHERE db2gse.ST_Length(c.location)>10 | El predicado se debe utilizar en la cláusula WHERE. (ST_Length es una función espacial, pero no un predicado.) |
SELECT * FROM customers c WHERE 1=db2gse.ST_Within(c.location,:BayArea) | El predicado debe quedar a la izquierda de la comparación. |
SELECT * FROM customers c WHERE db2gse.ST_Within(c.location,:BayArea)=2 | Las comparaciones de igualdad deben utilizar la constante de entero 1. |
SELECT * FROM customers c WHERE db2gse.ST_Within(:SanJose,:BayArea)=1 | Debe haber una columna espacial que se utilice en el predicado como el destino de la búsqueda y debe haber un índice espacial creado en dicha columna. (SanJose y BayArea no son columnas espaciales y, por lo tanto, no pueden tener asociado un índice espacial. ) |