首页
论坛
门户
空间
手机版
IXPUB
插件
收藏
设置
注册
登录
商店
搜索
培训
Wiki
Blog
归档
丛书
退出
ITPUB论坛
»
Oracle专题深入讨论
» 偷偷问一个自己想不明白的问题(关于number类型的存储机制)
‹‹ 上一主题
|
下一主题 ››
15
1/2
1
2
››
投票
交易
悬赏
活动
评价
|
打印
|
推荐
|
订阅
|
收藏
标题: 偷偷问一个自己想不明白的问题(关于number类型的存储机制)
超级野人
老会员
精华贴数 2
个人空间
0
技术积分 2000 (783)
社区积分 13 (9044)
注册日期 2002-11-20
论坛徽章:1
#1
使用道具
发表于 2008-5-8 11:29
偷偷问一个自己想不明白的问题(关于number类型的存储机制)
发现再oracle中number的存储并不是按照c语言的相应的数字格式来存储,而是经过一定的规则“翻译”成相应的2进制格式来存储。我就奇怪了,为什么不直接转换,而是按照自己的规则来“翻译”存储,我的意思,oracle中的数据类型完全可以按照c语言中相应的数据格式来存储呀,比如: __int 8,__int16,__int 32,float,double等等,这样在查询,运算时候可以完全不用再把存储单元中的数据“翻译“成数字,不是更加方便么?虽然oracle中的number类型要对应c语言中的多个类型,但是既然都要经过“翻译“,转换成c语言的数据格式只用“翻译”一次,而现在的方式是存储的时候“翻译”一次,取数据的时候再“翻译”一次(还愿为相应的原始数字),不是更加麻烦么?
__________________
我是野人我怕谁,我的qq:574674565
只看该作者
Yong Huang
版主
精华贴数 2
个人空间
0
技术积分 3994 (347)
社区积分 120 (3015)
注册日期 2001-10-9
论坛徽章:6
#2
使用道具
发表于 2008-5-9 04:59
Oracle uses "binary coded decimal" (BCD). According to
http://en.wikipedia.org/wiki/Binary-coded_decimal
"Its main virtue is that it allows easy conversion to decimal digits for printing or display and faster decimal calculations. Its drawbacks are the increased complexity of circuits needed to implement mathematical operations and a relatively inefficient encoding"
If Oracle were to start over, would they still use BCD? Probably not. They originally chose it, well, we can say, for historical reason.
Those studying computer science can tell us more.
Yong Huang
只看该作者
晶晶小妹
月是上弦
精华贴数 3
个人空间
5970
技术积分 1731 (941)
社区积分 9 (11458)
注册日期 2008-2-15
论坛徽章:4
#3
使用道具
发表于 2008-5-9 14:30
我觉得可能是Oracle想提高NUMBER型的精度。并且,用软件实现的数据类型,在软件内部可以对此数据类型有更多的控制。BINARY_FLOAT和BINARY_DOUBLE是硬件型的数据类型。速度比NUMBER快,但精度不如NUMBER
__________________
没有必胜的秘籍,没有方程式遵循
要赢~只有全身心的投入!
为了方便大家查阅,所有的文章都已转入空间
http://space.itpub.net/?13095417
请大家多多支持!
只看该作者
Yong Huang
版主
精华贴数 2
个人空间
0
技术积分 3994 (347)
社区积分 120 (3015)
注册日期 2001-10-9
论坛徽章:6
#4
使用道具
发表于 2008-5-10 01:29
晶晶小妹, do you have performance comparison between number and binary_float, binary_double? Thanks.
Yong Huang
只看该作者
zhaolinjnu
丹臣
精华贴数 0
个人空间
0
技术积分 1938 (815)
社区积分 13 (9227)
注册日期 2006-3-10
论坛徽章:5
#5
使用道具
发表于 2008-5-12 14:31
使用一个统一的number类型,对用户来说,不是很方便吗?
如果要让许多用户搞懂一大堆各种不同的数字类型的区别,可能会比较难,很容易因为考虑不周,使用了长度不够的数据类型。
ORACLE这么做提高了数据类型使用的易用性,可能牺牲了一些性能(我没有实际测试过)
__________________
--------------------------------------------------------
路漫漫其修远兮,吾将上下而求索
我的blog:Data & Architecture DBA
http://zhaolinjnu.blog.sohu.com
TAOBAO DBA TEAM BLOG
只看该作者
honggazi
SAP-FI
无敌新人
来自 黑龙江
精华贴数 0
个人空间
0
技术积分 1409 (1177)
社区积分 3598 (367)
注册日期 2006-4-11
论坛徽章:1
#6
使用道具
发表于 2008-5-12 16:08
学习
只看该作者
晶晶小妹
月是上弦
精华贴数 3
个人空间
5970
技术积分 1731 (941)
社区积分 9 (11458)
注册日期 2008-2-15
论坛徽章:4
#7
使用道具
发表于 2008-5-13 23:37
建一个表:
create table nfd (n number, f binary_float, d binary_double);
插入一些行:
insert /*+append*/ into nfd select rownum,rownum,rownum from dba_objects;
commit;
insert /*+append*/ into nfd select rownum+11372,rownum+11372,rownum+11372 from dba_objects;
commit;
insert /*+append*/ into nfd select rownum+22748,rownum+22748,rownum+22748 from dba_objects;
commit;
sid=39 pid=18> select count(*) from nfd;
COUNT(*)
----------
34110
总共有34110行。
打开计时:
set timing on
我先试验了求和:
sid=39 pid=18> select sum(n*n) from nfd;
SUM(N*N)
----------
1.3232E+13
已用时间: 00: 00: 00.03
执行多次上面的命令后,时间稳定在0.03秒。
对其他两列也做同样的运算,时间差不多。可能是行太少,差别不明显,把操作换成复杂点的:
sid=39 pid=18> select sum(ln(n)) from nfd;
SUM(LN(N))
----------
321915.626
已用时间: 00: 00: 02.74
NUMBER型的列用时2.74秒。
sid=39 pid=18> select sum(ln(f)) from nfd;
SUM(LN(F))
----------
3.219E+005
已用时间: 00: 00: 00.04
binary_float型的列用时0.04秒。
binary_double型的列也是0.04秒。
__________________
没有必胜的秘籍,没有方程式遵循
要赢~只有全身心的投入!
为了方便大家查阅,所有的文章都已转入空间
http://space.itpub.net/?13095417
请大家多多支持!
只看该作者
Yong Huang
版主
精华贴数 2
个人空间
0
技术积分 3994 (347)
社区积分 120 (3015)
注册日期 2001-10-9
论坛徽章:6
#8
使用道具
发表于 2008-5-14 04:53
QUOTE:
原帖由
晶晶小妹
于 2008-5-13 09:37 发表
...
sid=39 pid=18> select sum(ln(n)) from nfd;
SUM(LN(N))
----------
321915.626
已用时间: 00: 00: 02.74
NUMBER型的列用时2.74秒。
sid=39 pid=18> select sum(ln(f)) from nfd;
SUM(LN(F))
----------
3.219E+005
已用时间: 00: 00: 00.04
binary_float型的列用时0.04秒。
binary_double型的列也是0.04秒。
Thanks for the test. It's quite impressive. I'll remember to use binary_float and binary_double when the app needs fast computation.
For completeness, Note:311971.1 talks about the performance enhancement of these data types new in 10g. Note:291024.1 says the two data types can't be exported by the old export tool (exp) when transporting a tablespace and expdp must be used. I'm not sure if there's any other limitation. If anybody finds any, please post a message to this thread.
Yong Huang
只看该作者
wisdomone1
圣甲会员
希望会员
精华贴数 0
个人空间
0
技术积分 2359 (655)
社区积分 60 (4359)
注册日期 2007-3-15
论坛徽章:4
#9
使用道具
发表于 2008-5-22 00:07
学习.
只看该作者
huanhuanlove
精华贴数 0
个人空间
0
技术积分 2 (224020)
社区积分 0 (1778075)
注册日期 2008-5-22
论坛徽章:0
#10
使用道具
发表于 2008-5-22 17:54
版主英文水平真牛。。。。
只看该作者
15
1/2
1
2
››
投票
交易
悬赏
活动
相关内容
ITPUB论坛
≡ 数据库技术 ≡
> Oracle数据库管理
> Oracle开发
> Oracle Developer Suite
> Oracle入门与认证
> Oracle专题深入讨论
> Oracle新技术/11g
> Oracle电子文档
> Oracle Application Server套件
> IBM数据库产品
> MS SQL Server
> Sybase管理与开发
> MySQL及其它开源数据库
> 内存数据库
> 数据仓库与数据挖掘
> 移动及嵌入式数据库
≡ 企业信息化 ≡
> ERP产品与实践
> CRM产品与实践
> HR产品与实践
> 物流
> 供应链
> 供应链建模与仿真
> 物流设备与系统工程
> 企业管理咨询
> 管理协同与办公自动化
> IT服务管理
> 数据中心建设
> ERP二次开发
> Oracle ERP
> EBS相关文档
> PeopleSoft与JDE
> SAP R/3
> SAP Business One开发与快速实施
> SAP财务及CRM
> SAP后勤及HR
> mySAP ERP
> 系统开发及跨应用设置
> SAP相关文档
> 国外其它ERP产品
> 国内ERP产品
≡ 开发技术 ≡
> Java入门与认证版
> Java web开发及框架技术
> Java企业开发
> ASP.NET【已迁移到微软开发技术论坛】
> .Net企业开发与应用【已迁移到微软开发技术论坛】
> WEB程序开发
> WEB 2.0技术
> 动态语言
> 移动与游戏开发
≡ 系统设计与项目管理 ≡
> 系统分析与UML
> 系统分析与UML精华区
> 项目管理
> 项目过程
> 软件测试
> 算法讨论与研究
≡ IBM软件技术园地 ≡
> IBM数据库产品
> Lotus
> Tivoli
> Websphere
> Rational
> 与SOA相关的IBM产品与技术
> IBM软件技术精英协会
> 软件技术精英活动专版
≡ 操作系统与硬件 ≡
> AIX及IBM产品【已迁移到IXPUB】
> HP-UX及HP产品【已迁移到IXPUB】
> Solaris及SUN产品【已迁移到IXPUB】
> Linux及其应用 【已迁移到IXPUB】
> 其它UNIX系统【已迁移到IXPUB】
> windows系统及微软相关产品 【已迁移到IXPUB】
> 存储设备与容灾技术 【已迁移到IXPUB】
> 服务器 【已迁移到IXPUB】
≡ 行业纵向讨论区 ≡
> IT业界评论与展望
> 政府与教育事业
> 中国政府信息主管联盟
> 电信行业
> 金融行业
> 医卫行业
> 制造行业
> 电力行业
> 信息安全与审计
≡ 会员交流 ≡
> IT职业生涯
> 招聘求职商务信息
> 旅游,驴友
> 汽车世界
> 外语角
> 数码摄影
> 你的故事我的歌
> 音乐推荐区
> 电子图书与IT文档资料
> 软件交流
> 软件交流精华区
≡ ITPUB产品与服务 ≡
> ITPUB地面活动专版
> BLOG天地
> WIKI世界
> 授权用户区
> 站务管理
≡ 微软开发技术 ≡
> 开发工具和语言
> .NET Framework 相关
> Visual Basic/VB.net
> Visual C#
> Visual C++/vc.net
> Visual Studio
> .NET软件架构与模式
> .NET开发辅助工具及框架
> Web开发
> ASP.NET与AJAX
> Web相关讨论(IIS等)
> Silverlight 技术
> Office开发
> Microsoft office system
> Office Business Application
> 微软企业级产品技术
> windows server
> SharePoint
> Exchange Server
> Biztalk
> 嵌入式及移动开发
> Windows Embedded 嵌入式技术
> Windows 移动设备
> 微软产品用户交流区
> .Net电子书籍&&书籍介绍
> .Net人才交流
技术积分榜
社区积分榜
徽章
电子杂志
会员
团队
统计
邮箱
游乐场
帮助
TOP
CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号
联系我们
法律顾问
控制面板首页
编辑个人资料
积分交易
公众用户组
好友列表
升级个人空间
基本概况
论坛排行
主题排行
发帖排行
积分排行
在线时间
管理团队
管理统计