首页oracle性能优化 › ORACLE数值类型的性能优化技巧number,Int,float

ORACLE数值类型的性能优化技巧number,Int,float

那什么是数值类型?

比如常见的有 number,Int,float,最常用的是number类型

性能是如何考虑的呢?

使用时有哪些技巧呢?

这些是我们重点考虑的知识点.我们说精度越低,存储的空间越小,性能越高,其实空间节约对于性能的提高是非常有限的。 有时,我们还需要利用空间来换取时间呢,浮点类型还有更重要的因素来影响性能 ,那就是浮点运算机制跟number的运算机制是完全不同的 

记住:浮点的性能要高很多

 

那我们要从浮点的内部机制来说起 浮点数是一个有理数子集中一个数的数字表示,通常用于在计算机上近似一个任意的实数 ,浮点是依赖硬件设备的

总结下:

浮点是硬件来计算的

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;

发表评论

注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>