Respectez les règles suivantes si vous voulez optimiser des requêtes spatiales à l'aide de prédicats spatiaux.
WHERE db2gse.ST_Within(c.location,:BayArea)=1
WHERE db2gse.ST_Within(c.location,:BayArea)=1
Le Tableau 4 indique les manières correcte et incorrecte de créer des requêtes spatiales dans le cadre de l'exploitation de l'index spatial.
Tableau 4. Règles d'exploitation des index
Requête spatiale | Règle non respectée |
---|---|
SELECT * FROM customers c WHERE db2gse.ST_Within(c.location,:BayArea)=1 | Toutes les conditions sont respectées dans cet exemple. |
SELECT * FROM customers c WHERE db2gse.ST_Distance(c.location,:SanJose)<10 | Toutes les conditions sont respectées dans cet exemple. |
SELECT * FROM customers c WHERE db2gse.ST_Length(c.location)>10 | ST_Length n'est pas un prédicat spatial. |
SELECT * FROM customers c WHERE 1=db2gse.ST_Within(c.location,:BayArea) | Le prédicat doit figurer à gauche de la comparaison. |
SELECT * FROM customers c WHERE db2gse.ST_Within(c.location,:BayArea)=2 | Les comparaisons d'égalité doivent utiliser la constante entière 1. |
SELECT * FROM customers c WHERE db2gse.ST_Within(:SanJose,:BayArea)=1 | Dans le prédicat, une colonne spatiale doit être utilisée en tant que cible de la recherche et elle doit être dotée d'un index spatial. (SanJose et BayArea ne sont pas des colonnes spatiales et ne peuvent donc pas être associées à un index spatial.) |