Die folgenden Regeln gelten, wenn Sie räumliche Abfragen mit räumlichen Prädikaten optimieren wollen:
WHERE db2gse.ST_Within(c.location,:BayArea)=1
WHERE db2gse.ST_Within(c.location,:BayArea)=1
Tabelle 4 zeigt richtige und falsche Beispiele zum Erstellen räumlicher Abfragen nur Nutzung des räumlichen Index.
Tabelle 4. Regeln zur Nutzung des Index
Räumliche Abfrage | Regel verletzt |
---|---|
SELECT * FROM customers c WHERE db2gse.ST_Within(c.location,:BayArea)=1 | In diesem Beispiel wurde keine Regel verletzt. |
SELECT * FROM customers c WHERE db2gse.ST_Distance(c.location,:SanJose)<10 | In diesem Beispiel wurde keine Regel verletzt. |
SELECT * FROM customers c WHERE db2gse.ST_Length(c.location)>10 | Das Prädikat muß in der WHERE-Klausel verwendet werden. (ST_Length ist eine räumliche Funktion, aber kein Prädikat.) |
SELECT * FROM customers c WHERE 1=db2gse.ST_Within(c.location,:BayArea) | Das Prädikat muß auf der linken Seite des Vergleichs stehen. |
SELECT * FROM customers c WHERE db2gse.ST_Within(c.location,:BayArea)=2 | Bei Vergleichen auf Gleichheit ist die ganzzahlige Konstante 1 zu verwenden. |
SELECT * FROM customers c WHERE db2gse.ST_Within(:SanJose,:BayArea)=1 | In dem Prädikat muß eine räumliche Spalte als Suchziel verwendet werden, und es muß mit dieser Spalte ein räumlicher Index erstellt werden. (SanJose und BayArea sind keine räumlichen Spalten, daher kann ihnen kein räumlicher Index zugeordnet werden.) |