若您想使用 Spatial 谓词来优化 Spatial 查询,需要遵循下列规则:
WHERE db2gse.ST_Within(c.location,:BayArea)=1
WHERE db2gse.ST_Within(c.location,:BayArea)=1
表 4显示了创建 Spatial 查询来开发 Spatial 索引的正确方法和错误方法。
Spatial 查询 | 违反的规则 |
---|---|
SELECT * FROM customers c WHERE db2gse.ST_Within(c.location,:BayArea)=1 | 此示例中没有违反条件。 |
SELECT * FROM customers c WHERE db2gse.ST_Distance(c.location,:SanJose)<10 | 此示例中没有违反条件。 |
SELECT * FROM customers c WHERE db2gse.ST_Length(c.location)>10 | 必须在 WHERE 子句中使用谓词。(ST_Length 是 Spatial 函数,但不是谓词。) |
SELECT * FROM customers c WHERE 1=db2gse.ST_Within(c.location,:BayArea) | 谓词必须在比较的左边。 |
SELECT * FROM customers c WHERE db2gse.ST_Within(c.location,:BayArea)=2 | 相等性比较必须使用整常数 1。 |
SELECT * FROM customers c WHERE db2gse.ST_Within(:SanJose,:BayArea)=1 | 必须在谓词中使用 Spatial 列作为搜索目标, 并且必须在那一列上创建 Spatial 索引。 (SanJose 和 BayArea 不是 Spatial 列,因此不能具有与它们相关的索引。) |