那什么是数值类型?
比如常见的有number,Int,float,最常用的是number类型
性能是如何考虑的呢?
使用时有哪些技巧呢?
这些是我们重点考虑的知识点.我们说精度越低,存储的空间越小,性能越高,其实空间节约对于性能的提高是非常有限的。有时,我们还需要利用空间来换取时间呢,浮点类型还有更重要的因素来影响性能,那就是浮点运算机制跟number的运算机制是完全不同的
记住:浮点的性能要高很多
更多oracle性能详解请参见:http://www.icartype.com
那我们要从浮点的内部机制来说起浮点数是一个有理数子集中一个数的数字表示,通常用于在计算机上近似一个任意的实数,浮点是依赖硬件设备的
总结下:
o浮点是硬件来计算的
oNUMBER类型,是由软件来计算的
他们两者的性能差至少在1个数量级
createtablenumber_tuning
(num_typenumber,
float_typebinary_float,
double_typebinary_double
);
selectsum(ln(num_type))fromnumber_tuning;
selectsum(ln(float_type))fromnumber_tuning;
selectsum(ln(double_type))fromnumber_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秒
更多oracle性能详解请参见:http://www.icartype.com
双精度浮点通常是最快的,我们说了,空间不是影响性能的关键,这个实验是不是看的很清楚,浮点类型比Number类型快很多,因为浮点是硬件计算的
如果我们的业务表已经设置成NUMBER类型了,我又不想把表结构的NUMBER类型转换成浮点类型,又想提高计算效率
方法是:我们可以在语句级强制类型转换,而不在表结构级上转换
使用cast函数
selectsum(ln(cast(num_typeasbinary_double)))
fromnumber_tuning;
更多oracle性能详解请参见:http://www.icartype.com/?p=28