Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6683748
  • 博文数量: 1005
  • 博客积分: 8199
  • 博客等级: 中将
  • 技术积分: 13071
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-25 20:19
个人简介

脚踏实地、勇往直前!

文章分类

全部博文(1005)

文章存档

2020年(2)

2019年(93)

2018年(208)

2017年(81)

2016年(49)

2015年(50)

2014年(170)

2013年(52)

2012年(177)

2011年(93)

2010年(30)

分类: Oracle

2012-06-14 10:53:32

环境:
OS:Red Hat Linux As 5
DB:10.2.0.4
 
我们在设计表的时候数字的字段经常定义为number类型,很少用到浮点型和双精度浮点型,这可能跟业务需求有关,若这三种类型都能满足业务需求的情况下,推荐使用浮点型或是双精度浮点型,因为浮点型和双精度浮点类型是直接通过CPU计算的,而number类型是通过oracle软件计算的,我们知道CPU的计算速度要远大于软件的计算速度,下面通过一个简单的例子说明下.
 
1.创建表
Create Table tb_number_test
(
  number_type Number,
  float_type  binary_float,
  double_type binary_double
);
 
2.写入数据
SQL> Insert Into tb_number_test Select Rownum,Rownum,Rownum From Dba_Objects;
49746 rows created.
Elapsed: 00:00:01.79
3.测试各种类型的执行时间
SQL>set timing on;
SQL> Select sum(Sin(t.number_type)) From tb_number_test t;
SUM(SIN(T.NUMBER_TYPE))
-----------------------
             1.76424994
Elapsed: 00:00:11.73
SQL> Select sum(Sin(t.float_type)) From tb_number_test t;
SUM(SIN(T.FLOAT_TYPE))
----------------------
            1.764E+000
Elapsed: 00:00:00.23
SQL> Select sum(Sin(t.double_type)) From tb_number_test t;
SUM(SIN(T.DOUBLE_TYPE))
-----------------------
             1.764E+000
Elapsed: 00:00:00.17
从以上结果可以看出number类型用时最长,浮点类型和双精度浮点类型的用时差不多,双精度浮点类型用时最短.
为了准确性,再次执行看下结果
SQL> Select sum(Sin(t.number_type)) From tb_number_test t;
SUM(SIN(T.NUMBER_TYPE))
-----------------------
             1.76424994
Elapsed: 00:00:14.85
SQL> Select sum(Sin(t.float_type)) From tb_number_test t;
SUM(SIN(T.FLOAT_TYPE))
----------------------
            1.764E+000
Elapsed: 00:00:00.20
SQL> Select sum(Sin(t.double_type)) From tb_number_test t;
SUM(SIN(T.DOUBLE_TYPE))
-----------------------
             1.764E+000
Elapsed: 00:00:00.06
结果跟第一次的结果一致,说明number类型用时最长,双精度浮点类型用时最短.
 
目前数据库的数字类型的字段都定义为number了,那怎么用到浮点型呢,我们可以通过使用cast函数将number类型转换为浮点类型,如下:
 
SQL> Select sum(Sin(cast(t.number_type As binary_double))) From tb_number_test t;
SUM(SIN(CAST(T.NUMBER_TYPEASBINARY_DOUBLE)))
--------------------------------------------
                                  1.764E+000
Elapsed: 00:00:00.42
-- The End --
 
阅读(11487) | 评论(0) | 转发(0) |
0

上一篇:重建控制文件

下一篇:Oracle内核视图大全

给主人留下些什么吧!~~