一数据库
1. 先创建逻辑模型,也就是ER图 ,再映射为物理模型。oracle
2. 关于范式, 标准化数据模型通常都不是最终的结果,但他始终是建模最好的起点。性能
键,完整的键,除了键没有其余东西。优化
3. 关于数据类型的选择。.net
因为oracle在数据类型的物理存储上采用很是灵活的方式,所以从存储和性能考虑,使用限制性很强的数据类型或者精度 并无优点。设计
二指针
选择数据类型时,要注意如下方面:对象
1.大部分状况下,无论你如何限制数据类型,Oracle内部都会使用大范围高精度的浮点方式进行存储,针对于数字和日期。blog
就算你给一个数字指定了精度,这个精度更多的意义在于约束数据或定义文档,而不是为了优化性能。索引
也有例外的状况,就是精度可以减小数据的长度,就会有利于性能的提升。
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点, 分区消除,便于管理历史分区数据而不影响当前分区。
关于设计原则,就是以上内容,转载:http://blog.csdn.net/familyrun/article/details/47037393
关于细节规范: