您的位置:首页 > 数据库 > Oracle

oracle 数据库设计的一些原则

2015-07-24 10:37 288 查看

1. 先建立逻辑模型,也就是ER图 ,再映射为物理模型。
2. 关于范式, 标准化数据模型一般都不是最终的结果,但他始终是建模最好的起点。
键,完整的键,除了键没有其他东西。
3. 关于数据类型的选择。
由于oracle在数据类型的物理存储上采用非常灵活的方式,因此从存储和性能考虑,使用限制性很强的数据类型或者精度 并没有优势。


选择数据类型时,要注意以下方面:
1.大部分情况下,不管你如何限制数据类型,Oracle内部都会使用大范围高精度的浮点方式进行存储,针对于数字和日期。
就算你给一个数字指定了精度,这个精度更多的意义在于约束数据或定义文档,而不是为了优化性能。
也有例外的情况,就是精度能够减少数据的长度,就会有利于性能的提高。

2.固定长度的字符串都会占用一个固定长度的存储空间。 采用固定长度可以降低碎片,但是可能会导致较大的平均行长,导致全表扫描开销加大。
因此,除非你十分确定字符串的长度是确定的,比如MAC地址,否则你就应该选择变长字符串类型。

3 varchar在11g之后全部用varchar2替代,现阶段 2者是一样的。

4. 对于大文件,推荐使用 lob类型。 Blob 二进制, Clob 文本,bfile 外部储存。

三 关于人造建:
人造键通常会比自然键带来更好的性能。
他通常由一个数字类型构成。
相比自然键,会减少表连接的开销和索引查询的开销。

逻辑模型不要一对一映射到物理模型,逻辑主要考虑功能的实现,物理 主要考虑 性能和储存方式,,这样可以大大节约以后调优的时间。!!

四 关于表类型的选择
后谈

五 关于null 值
普通索引不要存null,null不会走索引,只能全表扫。
组合索引 和位图索引可以储存null。
采用null可以降低行的平均长度,从而一定程度上提高全表扫描的性能。
将查询null 更改为查询一个默认值,就是为了走索引。!!
null值的储存需要一个字节的储存空间。

六 列的顺序
访问靠后的列,比靠前的列 需要额外消耗少量的CPU资源。 基于此,把经常访问的列放到前面会带来少量的性能提升。

七 反规范化
1. 复制列值
主要为了避免使用表连接进行查询。

三 物理方面
物理存储方案
1. 当往表中插入新纪录的时候,oracle需要扫描空闲数据块链表。 ASSM 能够自动的很好的完成 空闲数据快链表 以避免 链表争用。针对对插入事务频繁的表。

2. 通过合理设置pctfree 来避免行迁移。数据走,留指针。

3. 在一个事务更改一个块的时候,会获得事务槽,如果事务槽无法自动增加分配,那么事务将会等待。

4,数据压缩,基本都是说的能够提高全表扫描的性能,我的理解是对于范围扫描,也可以提高性能。 字符串的压缩率大于数字类型,对磁盘中数据的压缩收益要大于对内存中数据的压缩。

5 关于lob
一般储存超过4000字节的数据,否则用varchar2来储存。 通常情况下,Lob数据不会跟同一行记录的其他列储存在相同的数据块中,只有lob对象不到4000 ,才inline储存。
控制方式: enable/disable storage in row。
如果LOB字段是经常需要访问的字段,那么建议还是采用inline储存。因为访问外部储存 的lob需要额外的IO。

请设置db_securefile参数, 可以将新的lob列的默认储存方式设置为 secure file。

6 关于分区

分区主要在与2点, 分区消除,便于管理历史分区数据而不影响当前分区。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: