ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 测试NUMBER类型的性能

测试NUMBER类型的性能

原创 Linux操作系统 作者:oracle_db 时间:2012-05-31 13:35:19 0 删除 编辑
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/,如需转载,请注明出处,否则将追究法律责任。

下一篇: AUTOTRACE选项说明
请登录后发表评论 登录
全部评论

注册时间:2008-11-13

  • 博文量
    158
  • 访问量
    313882