那什么是数值类型?
比如常见的有 number,Int,float,最常用的是number类型
性能是如何考虑的呢?
使用时有哪些技巧呢?
这些是我们重点考虑的知识点.我们说精度越低,存储的空间越小,性能越高,其实空间节约对于性能的提高是非常有限的。 有时,我们还需要利用空间来换取时间呢,浮点类型还有更重要的因素来影响性能 ,那就是浮点运算机制跟number的运算机制是完全不同的
记住:浮点的性能要高很多
那我们要从浮点的内部机制来说起 浮点数是一个有理数子集中一个数的数字表示,通常用于在计算机上近似一个任意的实数 ,浮点是依赖硬件设备的
总结下:
o 浮点是硬件来计算的
o NUMBER类型,是由软件来计算的
他们两者的性能差至少在1个数量级
create table number_tuning
( num_type number,
float_type binary_float,
double_type binary_double
);
select sum(ln(num_type)) from number_tuning;
select sum(ln(float_type)) from number_tuning;
select sum(ln(double_type)) from number_tuning;
第一条,sum(ln(num_type))
花了1.2秒
再来看第二条,sum(ln(float_type))
0.09秒
再来看第三条,sum(ln(double_type))
0.04秒
number类型花1.2秒,单浮点0.09秒,双浮点0.04秒
双精度浮点通常是最快的 ,我们说了,空间不是影响性能的关键 ,这个实验是不是看的很清楚,浮点类型比Number类型快很多 ,因为浮点是硬件计算的
如果我们的业务表已经设置成NUMBER类型了 ,我又不想把表结构的NUMBER类型转换成浮点类型,又想提高计算效率
方法是:我们可以在语句级强制类型转换,而不在表结构级上转换
使用cast函数
select sum(ln(cast( num_type as binary_double ) ))
from number_tuning;
发表评论