WEB开发网
开发学院数据库DB2 DB2 Spatial Extender 性能调优(2) 阅读

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 
---------------------------------------------

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:DB Spatial Extender

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接