原文地址: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. 用事实说话,我们的数据库应选择RAID几?

    公司的新产品研发进入攻坚阶段,一个技术障碍横亘在面前无法回避.你搜寻了好久,终于在某网上商城寻找到了一本稀缺的专业书--答案似乎就在那里!兴奋的你通过在线交易系统下了订单.新品上市的日期迫近,可是一周 ...

  2. 时间字段 oracle 经验 设计,数据库设计与优化

    一.设计技巧 1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体.在特殊情况下,它们可能是一对多或多对一的关系,即 ...

  3. 设计数据库表时数据类型的选择

    设计数据库表时数据类型的选择 1. 整数类型 整数类型有:tinyint.smallint.mediumint.int.bigint,分别使用 8.16.24.32.64 位存储空间. 它们可以存储的 ...

  4. oracle学生信息管理系统课程设计,数据库课程设计-学生信息管理系统的设计与实现.doc...

    数据库课程设计-学生信息管理系统的设计与实现 2011-2012课程设计II 学生信息管理系统的设计与实现 一 设计内容 建立一个简单的在校学生信息查询系统,可以让使用者查询到学生的一些简单的个人信息 ...

  5. 1U和2U服务器应如何正确选择?各有什么优缺点?

    标准机架式服务器通常以U为高度单位,高度在很大程度上决定了服务器的内部空间和零部件的扩展能力. 不同高度的服务器对应不同的应用场景,但是目前1U和2U服务器在市场上的定位却有些模糊,有些1U和2U的配 ...

  6. adg oracle 架构_基于 Oracle RAC/ADG/OGG 等设计数据库双活方案,必须掌握五方面知识点...

    原标题:基于 Oracle RAC/ADG/OGG 等设计数据库双活方案,必须掌握五方面知识点 上周,社区组织活动就数据库(Oracle)双活方案进行了深入探讨,包括如何选择双活方案.具体方案的复杂度 ...

  7. Oracle之数据库设计概述

    其实讲了索引的这块了,接下来可能要讲的内容是物化视图,然后讲分区,然后数据库表结构的设计,你们总问我SQL优化,那在讲整个物化视图之前,咱们之前讲索引了,对于数据库的设计,咱们从头到尾的去过一遍,然后 ...

  8. 数据库设计中String类型的数据库类型选择

    在java中,对于String 类型的字段,我们在设计数据库的时候,会有两个选择,一个char,一个varchar,那我们应该怎么选择呢? 我们先来看一下char和varchar的区别: char是定 ...

  9. 第4章 数据库设计---数据库原理及应用

    目录 一.数据库设计方案 1. 数据库应用架构设计:单用户.集中.CS.分布 2. 数据库结构设计:概念.逻辑.物理 3. 数据库应用访问方式设计:访问方式 数据库结构设计模型 概念数据模型:概念,不 ...

最新文章

  1. NLP模型超越人类水平?你可能碰到了大忽悠
  2. 为什么 AI 芯片时代必然到来——从TPU开始的几十倍性能之旅
  3. (四)系统虚拟化关键技术
  4. nyoj 1216 整理图书(dp)
  5. 超级好看的14 款 Chrome 官方主题,有你喜欢的吗?
  6. 给3月要跳槽的前端提个醒!不了解微前端就别去面试了,不然……
  7. matlab调用python_从MATLAB调用Python函数
  8. 华为机试HJ7:取近似值
  9. leetcode------Binary Tree Level Order Traversal II
  10. linux编译C++代码
  11. 编程基础(三)——体系结构
  12. 【Python技能树共建】验证码实操2案例
  13. WAFW00F、WebCrack
  14. opencv_python Stitcher拼接图像实例(SIFT/SURF检测特征点,BF/FLANN匹配特征点)
  15. 通过stm32cubemx配置DCMI驱动ov5640摄像头
  16. [生存志] 第99节 白起奋威屠百万
  17. python 批量下载 代码_Python实现的批量下载RFC文档
  18. 答题器真的什么问题都能答出来吗?
  19. java+selnium爬取凡人修仙传
  20. 家庭问题(信息学奥赛一本通 - T1362)

热门文章

  1. Android多媒体开发
  2. c++重载运算符_Python 运算符重载
  3. 怎么用numpy读取excel的数据画三维图_python初学者,如何快速匹配excel任务
  4. mysql函数数组参数_MYSQL数组聚合函数,如PostgreSQL array_agg
  5. xml显示浏览器标签_浅析浏览器书签的导入和导出
  6. 下载软件一直转圈圈_来了来了,百度网盘不限速!亲测满速,支持免登录下载!...
  7. android 原始定位,安卓原生定位
  8. java直接量_Java教程:Java直接量(字面量)
  9. html文字绕图文字置顶,如何实现html文字绕排
  10. vue项目中使用echarts实现词云