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

DB2 Spatial Extender 性能调优(2)

 2007-06-01 16:21:34 来源:WEB开发网   
核心提示: 对 INSERT 语句的这些考虑同样适用于 SELECT 或 UPDATE 语句,例如,DB2 Spatial Extender 性能调优(2)(3),DB2 Spatial Extender 存储过程 ST_run_gc 对一组行进行地理编码(geocode),如果为提交范围指定一个值,

对 INSERT 语句的这些考虑同样适用于 SELECT 或 UPDATE 语句。例如,DB2 Spatial Extender 存储过程 ST_run_gc 对一组行进行地理编码(geocode)。如果为提交范围指定一个值,那么该过程可能不会立即处理所有受影响的行,但是其间它必须为这些行计数,并执行一个 COMMIT。初级的方法是使用一个游标对表进行扫描,并为每一行执行一个定位的更新语句。然而,定位更新会碰到我们刚才讨论的一个问题,那就是必须一次又一次地初始化地理编码器。

如果地理编码不仅仅是构造一个 linestring,而是执行更复杂的功能,那么对性能的影响将会更加显著。所以,如果在表中找到一个标识列,例如主键,则可以找到一种不同的解决方案。我们使用 DB2 OLAP 函数 row_number() 将一个惟一的数值赋给每个受影响的列,然后运行一个 block-wise 搜索更新,之后执行一次 COMMIT。清单 13 阐释了这一点。最里边的子查询找出所有需要更新的行;用户可能已经给出了一些条件来限制这些行。此外,每个行被赋予一个行号。下一步则根据行号过滤出那些属于将被地理编码的当前块的行。最后,最外面的 UPDATE 在相同的 SQL 作用域内将那些行逐个提供给地理编码器函数。这样,地理编码器只需为一个块进行初始化,而不必为每一行进行初始化。

清单 13. 为地理编码使用搜索更新

UPDATE <user_table>
SET  location = <geocoder_function> ( <parameters> )
WHERE id IN ( SELECT t.id
        FROM  ( SELECT id, ROW_NUMBER OVER ( ORDER BY id ) AS rn
            FROM  <user_table>
            WHERE <geocoding_selection> ) AS t
        WHERE t.rn BETWEEN <first_row_num> AND <last_row_num> )@

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

Tags:DB Spatial Extender

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