达梦数据库的数字类型与运算效率

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

由于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
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值