玖叶教程网

前端编程开发入门

DM7的数字类型与运算效率(dm算法)

数字类型按存储格式分为两种:二进制和十进制。

由于CPU有整数运算指令,二进制的整数可以直接计算;而十进制存储的整数需要先转化为二进制,然后再计算,所以效率差些。

Oracle的数字类型NUMBER (p,s)是按十进制存储的,可以作为表字段类型。p表示精度,最大38,s表示刻度,在-84~127之间。

NUMBER表示浮点数,表示精度为38的所有实数,表示的范围是 1.0 * 10(-130) —— 9.99 * 10(125) {38个9后边带88个0}

PL/SQL整数类型PLS_INTEGER是按二进制存储的,但不能作为表计算类型。

Oracle统一把数字作为NUMBER类型,虽然通用,但是牺牲了一定性能。

DM7的数字类型有:INT、BIGINT及NUMBER(p,s)。其中,INT和BIGINT是按二进制存储的整数类型,INT表示不超过10位整数,BIGINT表示不超过19位整数;NUMBER(p,s)是按十进制存储的浮点数类型。

因此,在设计时,尽量将NUMBER(10,0)改为 INT,NUMBER(19,0)改为BIGINT,以提高计算效率。

由于DM7考虑整数计算的性能,所以对于整数计算与Oracle有较大的差异,需要注意,以下举例说明:

(1)长度小于10位的整数,默认为INT类型

select 10/3 from dual;

Oracle返回3.33333333333333,DM7返回3。这是因为Oracle返回NUMBER类型;DM7当做INT处理,返回INT

(2)INT类型计算的结果依然为INT

select 10000*10000*100 from dual;

会报“数据溢出”,因为返回结果也是INT类型,超出了INT的10位长度。

要DM7的INT运算与Oracle兼容有两个办法:

(1)修改dm.ini参数COMPATIBLE_MODE=2,兼容Oracle的NUMBER(详情请参考《DM7系统管理员手册》)

(2)将INT转为NUMBER

select 1.0*10/3 from dual;

测试INT类型与NUMBER类型的计算效率差异:

(1)对于小于10位的整数,DM7的mod效率远高于Oracle。

(2)DM7上对比测试

--3.24s

--8.17s

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言