应用程序数据模型设计通常分两个阶段。建立逻辑数据模型为第一阶段,它包括对应用程序需求处理和存储的信息进行建模,并确保所有必要的数据都能够正确完整且无歧义的表示。关系数据库中,通常指构造一个标准化的实体-关系(E-R)模型。

将逻辑数据模型映射为物理数据模型为第二阶段。对关系数据库来讲,物理数据模型描述的是表、索引、视图、键和其它一些数据库特性。在传统的方法论中,逻辑数据模型设计往往忽略性能,而物理模型设计过程才开始对此进行考虑。

1、标准化和三范式

1.1 一个标准化的数据模型是没有任何数据冗余的,并且数据和关系能够被主键和外键唯一标识。从性能角度考虑,标准化数据模型一般不是最终建模的结果,但它始终是建模的最好起点。

1.2 第三范式是现在采纳最广泛的标准,特征就是所有数据完全依赖于主键。

2、数据类型选择

2.1 使用限制性很强的数据类型或精度并没有优势。不管如何限制数据类型,大部分情况下,Oracle内部都会使用大范围高精度的浮点方式进行存储。

2.2 采用固定长度的行长度可以降低碎片,但是它会导致较大的平均行长,这样会增加全表扫描的开销。因此,除非数据的长度确实是固定的,否则就应该优先选择变长字符串类型VARCHAR

2.3 VARCHAR可存储4000字节,9i以前版本就需要用LONG或LOB来存储这么长的字节。

2.4 Oracle Long 数据类型有很多局限性,现在都推荐使用LOB类型。

3、人造键<Oracle sequence>

一个自然键是由实体中具有唯一性的自然属性构成的,而人造键是没有任何含义的,它的存在就是为了唯一地标识实体中的记录。

自然健可以由多列组成并可包括任何数据类型。而人造键大多是一些连续的数字。人造键通常会带来更好的性能。

多列组合成的自然键,健的长度的增加,导致表联接和索引查询会消耗更高。

如果自然健被更新,则引用它的也需要更新,这将显著增加I/O和锁争用。而自然键没有含义,不要更新。

人造健索引空间小,因此索引树的深度会更低,有助于提升索引查询的性能。

4、可选的属性和NULL值

采用NULL可以降低行的平均长度,从而一定程度上提高全表扫描的性能,但是B树索引不能存储NULL,因此需要全表扫描来查找NULL值,而位图索引和组合索引可以存储NULL值。

5、列的顺序--对性能有微小的影响

访问表中靠后的列,相比访问靠前的列,需要额外消耗少量的CPU资源,因为ORACLE必须顺序扫描行结构以获得特定的列的位置

6、反规划化

规范化(Normalization)是指从数据模型中消除冗余和重复组,并确保关键属性是正确的。逻辑建模阶段的产生通常是一个规范化数据模型。

反规范化(Denormalization)是指在物理模型中重新引入冗余,重复或其它非规范化过程,主要意图是为了提高性能。

7、垂直分区

如果表很大,且预计会有频繁扫描,可以考虑将字段较长且不常访问的列迁移到一个单独的子表中,以减少行长度和提高 表扫描性能。

8、并行插入和空闲块链接

ASSM(Automatic Segment Storage Management)数据段存储自动管理

当往表插入新记录时,Oracle要扫描空闲数据块链表(freelist)以获得合适的剩余空间来存储新记录的数据块。如果并行操作频繁,需设置多个空闲链表来避免一种特别Buffer_busy争用问题。ASSM可自动处理此问题。MSSM则不行。

9、PCTFREE与PCTUSED

PCTFREE控制数据块的预留百分之多少的空闲空间,当数据块的空闲空间百分比低于PCTFREE时,设块不能插入新的记录。

PCTUSED决定一个空闲空间曾经少于PCTFREE的数据块,在做了数据删除后,当利用率低于PCTUSED时,又可以重新插入记录。

如果PCTFREE参数设置的太小,且表上有频繁的更新操作,则很可能发生行迁移(row migration),行迁移会在旧数据块上保留一个指向新数据块的指针。如此则通过索引扫描会额外消耗一次IO。

如果一个表上有频繁的全表扫描打操作,则确保不要将PCTFREE设置得过高,尤其是该表上的更新操作很少会导致记录长度增加的时候。

如果设置了较低的PCTFREE,则需要增加INITRANS参数的值,该参数可以通过建表语句设置。该参数控制一个ORACLE数据块在初始的时候有多少事务槽。

如果PCTFREE为0,则可能在分配新事务槽(TRANSACTION SLDT)的时候,发现数据块已经没有剩余空间而导致无法分配。如此,多个会话将无法同时更新数据块的内容,这时行级锁将会退化为数据块级锁。

10、压缩 --降低存储数据需要的空间

压缩表变小,读取数据I/O也会减少,如此会大大提升全表扫描的性能。

11、散列分区策略

11.1 你需要在大表上执行并行DML之类的并行操作,或者在多个大表之间执行并行表连接操作。

11.2 你预计表上会有大量并发的DLTP形式的访问,特别是你认为会产生热块并导致严重的争用。

12、索引

12.1 创建可广泛使用并有良好选择性的组合索引应该在索引策略中拥有最高优先级

12.2 如果我们略过组合索引第一列,Oracle仍可通过跳跃扫描(Skip-Scanning)来使用,这需要扫描每一个前导列值来找到匹配的非前导列值。因此它在前导列的不同值较少的时候运行最有效。

12.3 如果where子句中出现了表上的多个列,但没有包含所有相关的组合索引,只有包含单个列的索引,则Oracle有可能会执行索引合并(index merge)

转载于:https://www.cnblogs.com/optimize/p/10032336.html

数据库逻辑设计与物理设计相关推荐

  1. 数据库结构设计(逻辑设计和物理设计)

    1.数据库结构设计的步骤 需求分析:全面了解产品设计的存储需求 逻辑设计:设计数据的逻辑存储结构 物理设计:根据所用的数据库特点进行表结构设计 关系型数据库:Oracle.SQLServer.MySQ ...

  2. 【数据库考试】数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和物理设计

    一.选择题 (1) 在下列四个选项中,不属于基本关系运算的是(D ). A) 连接B) 投影C) 选择D) 排序 (2) 如果一个班只能有一个班长,而且一班长不能同时担任其它班的班 长,班级和班长两个 ...

  3. 概念结构设计、逻辑结构设计、物理设计的区分

    28.29.在数据库设计过程中,设计用户外模式属于(C ):数据的物理独立性和数据的逻辑独立性是分别通过修改( A)来完成的. A.概念结构设计 B.物理设计 C.逻辑结构设计 D.数据库实施 A.模 ...

  4. Kingbase数据库实验四 数据库系统的概要、逻辑、物理设计

    实验四   数据库系统的概要.逻辑.物理设计 一.实验目的 二.实验步骤及结果 一.实验目的 能够根据实际业务需求抽象出实体.实体的属性和实体的联系. 能够抽象业务所涉及的E-R图. 能够优化E-R图 ...

  5. 数据库 之数据库设计浅知识 -- 设计概述、概念结构设计(E-R模型概述)、逻辑结构设计(函数依赖和范式)、物理结构设计

    文章目录 1. 数据库设计概述 1.1 数据库设计的特点:结构和行为分离的设计 1.2 数据库设计方法 1.3 数据库设计的基本步骤 1.4 数据库设计过程中的各级模式 2. 需求分析 2.1 需求分 ...

  6. mysql数据库物理结构_MySQL数据库结构设计(物理设计)

    什么是物理设计 根据所选择的关系型数据库的特点对逻辑模型进行存储结构设计. MySQL数据库物理设计涉及的内容 1.定义数据库.表及字段命名规范 命名要遵守可读性原则.比如使用下划线来分割不同的单词等 ...

  7. 数据库设计之物理结构设计

    数据库在物理设备上的存储结构与存取方法称为数据库的物理结构,它依赖于选定的数据库管理系统.为一个给定的逻辑数据模型选取一个最适合应用要求的物理结构的过程,就是数据库的物理设计. 一.数据库的物理设计 ...

  8. 数据库逻辑设计 完全函数依赖、部分函数依赖、传递函数依赖、码、候选码、主码、范式

    数据库逻辑设计 R:关系名 U:组成该关系的属性名集合 D∶属性组U中属性所来自的域 DOM:属性 到域的映射 F:属性组U上的一组数据依赖 由于D.DOM对模式设计的关系不大,这里把关系模式简化为一 ...

  9. 概念设计.逻辑设计.物理设计.的简单说明

    从项目中总结出来的如何写说明书的部分.可能有人认为这个比较浅,实际上我只是说明一个问题,就是这些说明书的概要书写思想,因为每个公司的说明书都有自己的风格. 什么是概念设计说明书 <概念设计说明书 ...

最新文章

  1. 淡入淡出效果 || 高亮显示案例
  2. python分析基金数据_python基金会(大数据分析),的,PYTHON,基础,选择,练习
  3. 使用JUnitParams简化Parameterized tests
  4. qt设置鼠标追踪后,鼠标还是需要点击后才能变样式
  5. 【BZOJ4521】手机号码,数位dp
  6. mysql数据库的远程访问_mysql数据库远程访问设置方法
  7. Linux - 在yocto构建中使用i2c-tools
  8. 思科模拟器中的交换机使用方法
  9. 水水的证件-身份证、证件加水印小工具
  10. 休闲实用英语:别误会这些英文的意思
  11. android7.1 科大讯飞语音引擎设置为首选引擎
  12. 不变初心数——python
  13. cdh 添加jar包_hive引入jar包--HIVE.AUX.JARS.PATH和hive.aux.jars.path
  14. 短信网关接口开发技术
  15. PADS(7)——在PADS Layout一次性添加泪滴
  16. 丝线行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  17. 1920x1080平板 android,高清是王道!1080P分辨率屏幕平板大搜罗
  18. 华光昱能针对工程光纤布线的痛点?常见问题及解决方案
  19. 艺赛旗(RPA) Python 常见 excel 文件的操作模块
  20. open failed: EACCES (Permission denied)权限已加,写入sd卡仍报错的解决办法

热门文章

  1. Hello Spring Validation, 我爱你不问归期
  2. 腾讯企鹅号新分成策略试运行 引领内容产业回归初心
  3. Python | 删除csv或者tsv文件中的emoji表情符号
  4. TOM企业邮箱,用心做出好的产品,服务数十万企业!
  5. 两个∑符号,两个∏符号运算公式
  6. 使用MySQL或Java对查询结果中的手机号、身份证号等进行脱敏处理
  7. 2021最新Java面试题(Hibernate面试题、MyBatis面试题、Spring面试题、SpringMVC面试题)
  8. Tekla材料排板采购工具
  9. 百度与hao123 网址之家的故事,写在好123荣登百度首页之时
  10. 在线直播源码直播全流程探索