原文地址: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. plain framework 1 参考手册 入门指引之 模块

    模块 总述 基础 数据库 引擎 事件 文件 网络 性能 脚本 系统 工具 总述 上图为plain framework(简称简约框架)所有的模块,包括基础.数据库.引擎.事件.文件.网络.性能.脚本.系 ...

  2. C#语言数据总结

    整数类型 sbyte   -128~127之间 byte   0~255 short(Int16) -32768~32768 ushort(UInt16)  0~65535 Int (Int32)   ...

  3. ASP.NET Repeater 绑定 DropDownList Calendar 选择日期

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  4. 使用spring boot+mybatis+mysql 构建RESTful Service

    开发目标 开发两个RESTful Service Method Url Description GET /article/findAll POST /article/insert 主要使用到的技术 j ...

  5. Inline Workers--Web workers without a separate Javascript file

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> </head&g ...

  6. QT 对话框一

    标准文件对话框 其函数形式如下:: QString QFileDialog::getOpenFileName ( QWidget * parent=, const QString &capti ...

  7. 初中级Web开发人员的福音:《JavaScript启示录》上市了

    经历过14个月的等待,本书终于上市了,完全口语化叙述,请参考右边的链接. 本书介绍 本书无关于JavaScript设计模式,也无关于JavaScript面向对象代码实现.本书的写作目的也不是鉴别Jav ...

  8. scrapy 保存到 sqlite3

    scrapy 爬取到结果后,将结果保存到 sqlite3,有两种方式 item Pipeline Feed Exporter 方式一 使用 item Pipeline 有三个步骤 文件 pipelin ...

  9. Java7并发编程实战(一) 线程的中断

    控制线程中断的方法一般常规是定义一个布尔值,然后while(布尔值) 去执行,当想停止该线程时候,把布尔值设为false. 这里我们来看第二种,Interrupt 该例子模拟一个线程从1打印到10,然 ...

  10. C118+Osmocom-bb+Openbts搭建小型基站

    演示图片: 演示视频: 交流论坛:GsMsEc 交流Q群: