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/