测试NUMBER类型的性能

Oracle NUMBER 类型使用的CPU 时间远高于浮点数类型。从NUMBER 类型得到的答案比从浮点数得到的答案“精确“得多。但是如果你在对科学数据执行数据挖掘或进行复杂的数值分析,这种精度损失往往是可以接受的,另外可能会得到非常显著的性能提升。


测试:

创建测试表
SQL> drop table t;

Table dropped.

SQL> create table t(num_type number,
  2  float_type binary_float,
  3  double_type binary_double)
  4  /

Table created.
导入测试数据
SQL> insert /*+ append */ into t
  2  select rownum,rownum,rownum
  3  from all_objects;

50193 rows created.

SQL> commit;

Commit complete.

SQL> alter session set events '10046 trace name context forever,level 12';

Session altered.

对列进行相同操作
SQL> select sum(ln(num_type)) from t;

             SUM(LN(NUM_TYPE))
------------------------------
                        493084

SQL> select sum(ln(float_type)) from t;

SUM(LN(FLOAT_TYPE))
-------------------
         4.931E+005

SQL> select sum(ln(double_type)) from t;

SUM(LN(DOUBLE_TYPE))
--------------------
          4.931E+005

SQL> 
查看10046对应报告

select sum(ln(num_type)) 
from
 t


call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        2      1.03       1.01          0        171          0           1
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        4      1.04       1.01          0        171          0           1

select sum(ln(float_type)) 
from
 t


call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.01       0.01          0          1          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        2      0.05       0.05          0        170          0           1
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        4      0.07       0.07          0        171          0           1

select sum(ln(double_type)) 
from
 t


call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          1          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        2      0.05       0.05          0        170          0           1
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        4      0.06       0.06          0        171          0           1

但这并不是说就不要使用NUMBER类型,只是在对NUMBER类型进行大的计算时,可以改写为其它方法,如使用 CAST,


select sum(ln(cast( num_type as binary_double ) )) 
from
 t


call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.01       0.01          0          1          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        2      0.07       0.07          0        170          0           1
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        4      0.09       0.09          0        171          0           1

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15720542/viewspace-731545/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/15720542/viewspace-731545/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值