oracle设计数据库应选择正确的数据类型

哎哎10年前 (2015-05-05)数据库3994

  在设计数据库的时候,选择正确的数据类型,往往可以避免很多的问题,正确理解数据库的类型,对于存储空间规划,应用性能调整都会很有帮助,下面是我个人的一点总结: 1、 Char定长格式字符串,在数据库中存储时不足位数填补空格,不建议使用,会带来不必要的麻烦a、 字符串比较的时候,如果不注意(char不足位补空格)会带来错误b、 字符串比较的时候,如果用trim函数,这样该字段上的索引就失效(有时候会带来严重性能问题)c、 浪费存储空间 2、 Varchar2/Varchar不定长格式字符串,对于4000字节以内的字符串,建议都用该类型a、 网上有说char比varchar2性能好,但是如果你有兴趣做测试的话,会发现没有区别(如果发生行迁移,可以通过pctfree来调整)b、 充分利用存储空间 3、 Long/long rawOracle已经废弃,只是为了向下兼容保留着,应该全部升级到lobLong类型有很多限制a、 表中只能有一列long类型b、 Long类型不支持分布式事务c、 太多的查询不能在long上使用了 4、 Number定义Number的方法:Number(p,s)其中p,s都是可选的:a、 p代表精度,默认为38b、 s代表小数位数,取值范围-84~127,默认取值要看是否指定了p,如果制定了p,默认s为0,如果没有指定p,默认取最大值。几个例子:a、 Number(5,0)=Number(5) 取值范围99999~-99999b、 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、 DateDate类型是一个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、 LobClob/blob实现是比较复杂的,这里只提提几个和性能相关的点,当然能不用lob尽量不用:a、 一个lob字段包括lobindex和lobsegmentb、 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

相关文章

ORCLE 11g 下载地址 标准版 全套下载地址 下载地址列表 orcle 数据库11G

Oracle Database 11g Release 2 Standard Edition and Enterprise Edition Software DownloadsOracle 数据库 1...

navicat for oracle,出现connection to server failed, probable Oracle Net admin error,解决办法,错误怎么办?

  解决connection to server failed, probable Oracle Net admin error  navicat for oracle,oracle客户端软件,  我...

[oracle]数据库触发器的使用。创建一个自动增加的ID

将表t_uaer的字段ID设置为自增:(用序列sequence的方法来实现)----创建表Create table t_user(   Id num...