`
frank1998819
  • 浏览: 764785 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类

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

 
阅读更多
在设计数据库的时候,选择正确的数据类型,往往可以避免很多的问题,正确理解数据库的类型,对于存储空间规划,应用性能调整都会很有帮助,下面是我个人(gis817)的一点总结:

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. 规范化理论:在设计Oracle数据库时,遵循第一范式(1NF)、第二范式(2NF)和第三范式(3NF),以及更高层次的规范化,以减少数据冗余和提高数据一致性。 2. 数据库模式:通过创建逻辑视图(如星型模型、雪花模型...

    C# oracle数据库 毕业设计

    其次,Oracle数据库10g是Oracle公司的一款企业级数据库管理系统,支持多种数据类型和高级功能,如表、视图、存储过程、触发器等。在毕业设计中,可能创建了相关的数据库表来存储企业用户信息,如用户ID、用户名、...

    Oracle数据库设计文档——帮助数据库初学者了解数据库设计

    在这个过程中,需要考虑数据类型的选择、主键和外键的定义、以及存储过程和函数的设计,以确保数据的一致性和完整性。 进入物理设计阶段,我们关注数据库在Oracle系统中的实际实现,包括表空间的规划、索引策略、...

    GP数据库表结构转mysql库、oracle库 varchar类型字段长度批量处理excel_MYSQL_oracle_数据库

    转换表结构时,需要检查每个字段的数据类型和长度,确保在新环境中能正确存储数据。如果不做调整,可能会导致数据丢失或无法插入。 标签“mysql oracle 数据库”表明我们将讨论两个不同的数据库系统。在Oracle到...

    oracle数据库设计规范

    这部分虽然在给定内容中没有详细介绍,但通常包括命名规范、数据类型选择、SQL编写规范等内容,这些也是Oracle数据库设计中的重要组成部分。例如: - **命名规范**:规定了对象命名的规则,如表名、字段名等,以...

    Oracle数据库课程设计

    数据字典是数据库设计的一部分,它记录了所有数据库对象的详细信息,如字段名称、数据类型、长度、约束条件等,用于指导物理数据库的创建。 6. 数据库表的逻辑结构设计: 这一步骤涉及将E-R模型转换为具体的表...

    mysql数据库转换成oracle

    在使用这类工具时,按照其提供的指南进行操作,确保输入正确的连接信息和选择正确的源数据库(MySQL)和目标数据库(Oracle)。 6. **测试与验证**:完成数据迁移后,务必进行详尽的测试,确保所有数据成功转移且...

    Oracle数据库表转换为Mysql

    (1)打开PowerDesigner,创建一个新的Model,选择Oracle数据库类型。 (2)导入Oracle数据库表结构的sql文件。 (3)选择要转换的SQL文件,PowerDesigner将自动转换为Mysql数据库表结构。 (4)选择Mysql 5.0...

    基于ORACLE数据库程序设计

    了解Oracle中的数据类型是进行有效数据库设计的关键。08_Oracle数据类型.ppt将详细讲解Oracle支持的数据类型,包括数值、字符串、日期时间、二进制和对象类型等。 **管理表** 12_管理表.ppt探讨了如何在Oracle中...

    oracle数据库设计工具

    逻辑设计阶段,我们将ER图转换为关系模式,即确定每个表的字段、数据类型和约束。这个阶段可能需要使用DDL(Data Definition Language)来描述。Oracle SQL Developer Data Modeler可以生成DDL脚本,帮助我们定义...

    Oracle数据库设计优化指导

    例如,选择合适的数据类型可以减少存储空间,提高查询效率;合理创建索引可以加速查询,但过多的索引可能会增加写操作的开销;表分区有助于大数据量下的查询性能提升;而存储段优化则涉及表空间分配和段空间管理,...

    oracle数据库课程设计案例,

    本课程设计案例将为你提供深入理解Oracle数据库系统及其操作的宝贵机会。以下将围绕Oracle数据库的课程设计案例展开详细的讨论: 一、Oracle数据库基础 Oracle数据库采用SQL(结构化查询语言)作为其主要的数据管理...

    Oracle数据库的表格设计

    ### Oracle数据库的表格设计 #### Oracle数据库概述与结构 Oracle数据库是业界领先的数据库...综上所述,Oracle数据库的设计不仅需要考虑逻辑结构的合理性,还需要关注物理层面的优化,以确保数据的高效存储和检索。

    ORACLE数据库比对工具

    Oracle数据库比对工具是一款专为Oracle数据库设计的实用软件,由Delphi编程语言编写并提供源码,使得用户可以深入理解其工作原理并根据需要进行定制。在数据库管理、迁移、整合或性能优化等场景中,这样的工具能帮助...

    kettle 从oracle数据库导数据到hive 表

    - **异常处理**:针对可能出现的数据类型不匹配、空值处理等问题,提前在转换设计中加入相应的异常处理逻辑。 - **日志记录**:开启详细日志记录,便于后期分析数据迁移过程中可能遇到的问题及其原因。 通过上述...

    Oracle数据库sql转换mysql数据库工具

    1. **数据类型映射**:确保Oracle的数据类型被正确地映射到MySQL对应的类型,如NUMBER到DECIMAL,DATE到DATETIME等。 2. **字符集**:Oracle和MySQL支持的字符集可能不同,需确保字符集设置的一致性,避免数据丢失...

    Oracle数据库常用数据类型.doc

    Oracle 数据库常用数据类型 Oracle 数据库中有多种数据类型,每种数据类型都有其特点和应用...了解 Oracle 数据库的数据类型是非常重要的,因为它可以帮助开发者正确地设计数据库 schema,提高数据的存储和检索效率。

Global site tag (gtag.js) - Google Analytics