原文地址:http://blog.sina.com.cn/s/blog_5014663501007n40.html

在设计数据库的时候,选择正确的数据类型,往往可以避免很多的问题,正确理解数据库的类型,对于存储空间规划,应用性能调整都会很有帮助,下面是我个人的一点总结:
 
1、 Char
定长格式字符串,在数据库中存储时不足位数填补空格,不建议使用,会带来不必要的麻烦
a、  字符串比较的时候,如果不注意(char不足位补空格)会带来错误
b、  字符串比较的时候,如果用trim函数,这样该字段上的索引就失效(有时候会带来严重性能问题)
c、  浪费存储空间
 
2、 Varchar2/Varchar
不定长格式字符串,对于4000字节以内的字符串,建议都用该类型
a、  网上有说char比varchar2性能好,但是如果你有兴趣做测试的话,会发现没有区别(如果发生行迁移,可以通过pctfree来调整)
b、  充分利用存储空间
 
3、 Long/long raw
Oracle已经废弃,只是为了向下兼容保留着,应该全部升级到lob
Long类型有很多限制
a、  表中只能有一列long类型
b、  Long类型不支持分布式事务
c、  太多的查询不能在long上使用了
 
4、 Number
定义Number的方法:Number(p,s)
其中p,s都是可选的:
a、  p代表精度,默认为38
b、  s代表小数位数,取值范围-84~127,默认取值要看是否指定了p,如果制定了p,默认s为0,如果没有指定p,默认取最大值。
几个例子:
a、  Number(5,0)=Number(5) 取值范围99999~-99999
b、  Number(5,2) 取值范围999.99~-999.99
注意:其中的整数位数只有3位,小数位数有2位,按照如下方法计算:
     
整数位数<=p-s
     
小数位数<=s
如果插入123.555存储在数据库中变成123.56
(在小数的第三位上四舍五入),如果插入999.999,数据库就要抛错。
c、  Number(5,-2) 取值范围9999900~-9999900
(整数位数<=p-s,没有小数位数)
如果插入9999949存储在数据库中变成9999900(在整数的第二位上四舍五入),如果插入9999950,数据库就要抛错。
其他的数值类型都是number的衍生,底层都是number,比如integer/int完全映射到number(38)
性能相关:number是一种软实现的类型,如果需要对number做复杂的运算,建议先用cast内置函数转换number为浮点数类型
另外需要注意的一点是:number是变长类型,在计算表存储空间的时候要切记
 
5、 Date
Date类型是一个7字节的定长数据类型,没啥好说的,一个例子:性能a>b>c

a、Where
date_colum>=to_date(’01-jan-2007’,’dd-mon-yyyy’)

and date_colum<
DIV>

b、Where
trunc(date_colum,’y’)=to_date(’01-jan-2007’,’dd-mon-yyyy’)
c、Where to_char(date_colum,’yyyy’)=’2007’
 
6、 Timestamp/timestamp with time zone/timestamp with
local time zone
和date类似,只不过它另外支持小数秒和时区。语法Timestamp(n),n指定秒的小数位数,取值范围0~9。可选。
 
7、 Lob
Clob/blob实现是比较复杂的,这里只提提几个和性能相关的点,当然能不用lob尽量不用:
a、  一个lob字段包括lobindex和lobsegment
b、  Lob缺省可以存放在表中(表字段),条件是:
    
1.它的大小小于4kb
    
2.并且在定义的时候没有使用(disable storage inrow)字句(缺省是enable)
    
当lob大于4kb的时候它会被存放到lobsegment中
c、 
当lob存放在表中的时候,它可以被缓存,对于它的操作效率远远高于存储在lobsegment中的lob(不用lobindex)
d、 
存储在lobsegment中的lob缺省不在缓冲区缓存,对于lob的读写都是物理IO,代价非常高,所以对于大于4kb的lob字段千万不要频繁更新,效率非常低
e、 
存储在lobsegment中的lob可以在定义的时候指定使用cache(默认是nocache),这对于中等大小的lob(比如几k~几十k)很有效果,较少物理IO

[转]oracle设计数据库应选择正确的数据类型的更多相关文章

  1. 为更好地设计数据库,重新整理sql server数据类型

    我们在平常开发过程中,在设计数据的时候,经常碰到数据类型选择的问题,为了更快,更合适地选择正确的数据类型,所以在这里做个总结. 分类 sql server 数据类型 c# 数据类型 描述 应用场景 字 ...

  2. WCF开发时如何选择正确的实例模式(InstanceMode)?

    WCF开发时如何选择正确的实例模式(InstanceMode)?   在使用WCF实例模型时,你是否思考过这几个的问题: ”WCF中的实例模式如何正确应用”? ”使用WCF中的实例模式有何原则可以遵循 ...

  3. [转] 如何选择正确的Hadoop版本

    Gartner:如何选择正确的Hadoop版本 这份报告的全名是<How to Choose the Right Apache Hadoop Distribution>.主要介绍了企业如何 ...

  4. Oracle 11g数据库的创建

    由于是自己自学Oracle,如果有问题,请大家指出,谢谢! Oracle提供了DBCA来创建数据库,对于初学者来说使用DBCA创建数据库简化了很多工作和设置,直接在交互界面即可实现所有的功能. 然而对 ...

  5. 为什么MySQL数据库索引选择使用B+树?

    在进一步分析为什么MySQL数据库索引选择使用B+树之前,我相信很多小伙伴对数据结构中的树还是有些许模糊的,因此我们由浅入深一步步探讨树的演进过程,在一步步引出B树以及为什么MySQL数据库索引选择使 ...

  6. (转)权威支持: 选择正确的 WebSphere 诊断工具

    权威支持: 选择正确的 WebSphere 诊断工具 原文:https://www.ibm.com/developerworks/cn/websphere/techjournal/0807_supau ...

  7. Package设计1:选择数据类型、暂存数据和并发

    SSIS 设计系列: Package设计1:选择数据类型.暂存数据和并发 Package设计2:增量更新 Package 设计3:数据源的提取和使用暂存 一,数据类型的选择 对于SSIS的数据类型,容 ...

  8. Oracle 10g数据库备份与恢复操作手册

    Oracle 10g数据库备份与恢复操作手册 目录 Oracle 10g数据库备份与恢复操作手册... 前言... 文档目的... 文档范围... 目标读者... 其他说明... 冷备份... 热备份 ...

  9. Oracle 11g数据库详解

    常见异常: ORA-14025:不能为实体化视图或实体化视图日志指定PARTITION ORA-14026:PARTITION和CLUSTER子句互相排斥 ORA-14027:仅可以指定一个PARTI ...

随机推荐

  1. 周五了啦啦啦啦-LAMP+PHP‘s OOP

    hi 周五咯~~ 1.LAMP配置完结篇 五.LAMP配置环境优化 5.4 虚拟主机工作原理 apache的虚拟主机.virtual-host 用不同的域名访问不同的目录——手动模拟dns 修改hos ...

  2. LeetCode 笔记系列六 Reverse Nodes in k-Group [学习如何逆转一个单链表]

    题目:Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. ...

  3. [Top-Down Approach]My First C/S Program [Python]

    These days I was learning from Computer Networking --A Top-Down Approach by Kurose Ross. I modified ...

  4. For循环案例---九九乘法表

    概述:先创建一个Print99类,类中创建5个方法,分别为Test9901.Test9902.Test9903.Test9904.Test9905,分别打印出不同形状的九九乘法表,该类创建完成后再创建 ...

  5. Unity官网教程之Tips

    前言 翻译整理unity官网教程的tips部分,原文:http://unity3d.com/cn/learn/tutorials/topics/tips Snap 按住Ctrl键,并用鼠标拖动Game ...

  6. 查看LINUX进程内存占用情况

    可以直接使用top命令后,查看%MEM的内容.可以选择按进程查看或者按用户查看,如想查看oracle用户的进程内存使用情况的话可以使用如下的命令: (1)top top命令是Linux下常用的性能分析 ...

  7. Eclipse tooltip变黑的修正

  8. 开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发

    [原][开源框架]Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发,欢迎各位... 时间 2015-01-05 10:08:18 我是程序猿,我为自己代言 原文  http: ...

  9. 031医疗项目-模块三:药品供应商目录模块——供货商药品目录查询功能----------sql补充知识

    这个补充知识有一个点很有必要,视屏上的老师提出一点: 内链接关联查询: 如果表A和表B有一个外键关联 ,可以通过外键进行内链接查询 select dictinfo.*, dicttype.typena ...

  10. Windows Phone App Studio 无码开发手机应用

    上周微软发布了一款基于Web的Windows Phone应用开发工具 "Windows Phone App Studio".它与大家熟知Visual Studio的最大不同之处是W ...