DB2 Spatial Extender 性能调优(2)
2007-06-01 16:21:34 来源:WEB开发网核心提示: 减少对空间函数的调用当看到我们在本文前面使用的空间查询时,您会注意到,DB2 Spatial Extender 性能调优(2)(4),为了重叠测试,一个新的几何图形被构造成参数,这两个查询都表达了相同的语义,但是在我们的系统和数据库配置中,现在,ST_LineString 构造函数是一个没
减少对空间函数的调用
当看到我们在本文前面使用的空间查询时,您会注意到,为了重叠测试,一个新的几何图形被构造成参数。现在,ST_LineString 构造函数是一个没有任何副作用的确定性的函数。DB2 优化器知道那些条件,它可以断定多次调用那个函数不会有害。取决于您的系统和查询,这可能是一个聪明的选择,但是也可能不是最佳的选择。例如,在使用 DPF 特性的分区环境中,在每个分区上构造 linestring,与在单独一个分区上构造几何图形,然后通过表队列将它分布到其他需要这个值的分区上相比,可能要好得多。在另一种场景中,为将进行空间重叠测试的每一行生成 linestring 又可能产生完全不同的结果。因此,可能有必要使用公共表表达式重新构造空间查询,以确保只调用一次构造函数。在清单 14 中,首先可以看到原有的查询,后面有一个重新构造的查询。这里执行的 SQL 脚本可以在 下载 一节中找到。这两个查询都表达了相同的语义,但是在我们的系统和数据库配置中,第二个查询运行起来要快 9%。
清单 14. 重构空间查询
$ db2batch -d testdb -f test_cte.sql -i complete -s on
---------------------------------------------
Statement number: 1
SELECT id
FROM roads2
WHERE db2gse.ST_Intersects(shape, db2gse.ST_LineString(
'linestring(10 50, 20 40)', 1003)) = 1
Prepare Time is: 0.000 seconds
Execute Time is: 0.819 seconds
Fetch Time is: 0.000 seconds
Elapsed Time is: 0.819 seconds
---------------------------------------------
Statement number: 2
WITH t(g) AS
( VALUES ( db2gse.ST_LineString('linestring(10 50, 20 40)', 1003) ) )
SELECT r.id
FROM roads2 AS r, t
WHERE db2gse.ST_Intersects(r.shape, t.g) = 1
Prepare Time is: 0.000 seconds
Execute Time is: 0.744 seconds
Fetch Time is: 0.000 seconds
Elapsed Time is: 0.745 seconds
---------------------------------------------
- ››db2 对float类型取char后显示科学计数法
- ››DB2中出现SQL1032N错误现象时的解决办法
- ››DB2 锁升级示例
- ››db2诊断系列之---定位锁等待问题
- ››db2 命令选项解释
- ››DB2 最佳实践: 使用 DB2 pureXML 管理 XML 数据的...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 基础: 表空间和缓冲池
- ››DB2 XML 编程,第 1 部分: 理解 XML 数据模型
- ››DB2 pureScale 实战
更多精彩
赞助商链接