db2 自定义function的性能问题
最近在项目中需要在db2数据库中创建自定义function来处理数据,但是因为源表数据量大多上了千万,所以function处理的速度比较慢。一张三千多万的表竟然要处理4:30小时,所以想问下在db2数据库里面有没有办法提高function的速度?
不太好说,我感觉写function,procedure这些,一部分是其中DML语句的问题,另一部分就是控制语句,DML语句就是普通的sql优化,而控制语句就像别的程序代码一样去优化。
这不能说明是db2,UDF的问题,而是你UDF里面的SQL语句的问题。
1.sql效率是否高?
2.非得UDF才能解决这个需求吗?
function在表字段比较少的情况下处理速度倒是比较快,但是我们目前每张表的表字段一般都有100个左右,所以用函数处理其中的2~3个字段就要好几个小时,就是一直想不出好的方法。
另外我们处理数据的逻辑是:
declare mycur cursor for select col1,function1(col2) from source_table;
load from mycur of cursor WARNINGCOUNT 500 replace into objective_table;
跟这样的数据逻辑有关系吗?如果有用哪种方式加载数据到目标表比较快,尤其是多个表字段的情况下
大数据表是不适合用关联表技术的,除非你的内存超快而且海量
一个比较有效的方法是将一个大表根据某种规则置换成若干个小表,通过不同的要求对相应的子表进行操作,这样数据会很快捷
1、SQL的效率感觉还可以,但因为需要处理的源表大多有100多个字段,只要对其中的2~3个字段做function处理后再整张表导到目标表就非常慢。所以目前有个想法就是先对该表需要用function处理的每个字段根据old和new两个字段(old放旧值,new放function处理后的值)先导入到一张临时表,然后根据源表的old字段和临时表的old字段进行关联把new值导入目标表。这样处理的话对单个字段进行关联速度倒是挺快的,但是如果让源表同时关联10张左右这样的临时表不知道性能如何,有没有再调优的空间?
2、这个需求客户原先就要求用UDF,就是把源值根据某种规则转换为另外的一个值,不知道还有没有更好的办法?