试谈优化Oracle库表设计的若干方法.docx 立即下载
2023-03-17
约10千字
约15页
0
311KB
举报 版权申诉
预览加载中,请您耐心等待几秒...

试谈优化Oracle库表设计的若干方法.docx

试谈优化Oracle库表设计的若干方法.docx

预览

免费试读已结束,剩余 10 页请下载文档后查看

10 金币

下载文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

优化Oracle库表设计的若干方法1前言绝大多数的Oracle数据库性能问题都是由于数据库设计不合理造成的,只有少部分问题根植于DatabaseBuffer、SharePool、RedoLogBuffer等内存模块配置不合理,I/O争用,CPU争用等DBA职责范围上。所以除非是面对一个业已完成不可变更的系统,否则我们不应过多地将关注点投向内存、I/O、CPU等性能调整项目上,而应关注数据库表本身的设计是否合理,库表设计的合理性才是程序性能的真正执牛耳者。合理的数据库设计需要考虑以下的方面:·业务数据以何种方式表达。如一个员工有多个Email,你可以在T_EMPLOYEE表中建立多个Email字段如email_1、email_2、email_3,也可以创建一个T_EMAIL子表来存储,甚至可以用逗号分隔开多个Email地址存放在一个字段中。·数据以何种方式物理存储。如大表的分区,表空间的合理设计等。·如何建立合理的数据表索引。表索引几乎是提高数据表查询性能最有效的方法,Oracle拥有类型丰富的数据表索引类型,如何取舍选择显得特别重要。本文我们将目光主要聚焦于数据表的索引上,同时也将提及其他两点的内容。通过对一个简单的库表设计实例的分析引出设计中的不足,并逐一改正。考虑到手工编写库表的SQL脚本原始且低效,我们将用目前最流行的库表设计工具PowerDesigner10来讲述表设计的过程,所以在本文中你还会了解到一些相关的PowerDesigner的使用技巧。一个简单的例子某个开发人员着手设计一个订单的系统,这个系统中有两个主要的业务表,分别是订单基本信息表和订单条目表,这两张表具有主从关系的表,其中T_ORDER是订单主表,而T_ORDER_ITEM是订单条目表。数据库设计人员的设计成果如图1所示:图1订单主从表ORDER_ID是订单号,为T_ORDER的主键,通过名为SEQ_ORDER_ID的序列产生键值,而ITEM_ID是T_ORDER_ITEM表的主键,通过名为SEQ_ORDER_ITEM的序列产生键值,T_ORDER_ITEM通过ORDER_ID外键关联到T_ORDER表。需求文档指出订单记录将通过以下两种方式来查询数据:·CLIENT+ORDER_DATE+IS_SHPPED:根据"客户+订货日期+是否发货"条件查询订单及订单条目。·ORDER_DATE+IS_SHIPPED:根据"订货日期+是否发货"条件查询订单及订单条目。数据库设计人员根据这个要求,在T_ORDER表的CLIENT、ORDER_DATE及IS_SHPPED三字段上建立了一个复合索引IDX_ORDER_COMPOSITE;在T_ORDER_ITEM为外键ORDER_ID建立IDX_ORDER_ITEM_ORDER_ID索引。让我们看一下该份设计的最终SQL脚本:/*订单表*/createtableT_ORDER(ORDER_IDNUMBER(10)notnull,ADDRESSVARCHAR2(100),CLIENTVARCHAR2(60),ORDER_DATECHAR(8),IS_SHIPPEDCHAR(1),constraintPK_T_ORDERprimarykey(ORDER_ID));createindexIDX_CLIENTonT_ORDER(CLIENTASC,ORDER_DATEASC,IS_SHIPPEDASC);/*订单条目子表*/createtableT_ORDER_ITEM(ITEM_IDNUMBER(10)notnull,ORDER_IDNUMBER(10),ITEMVARCHAR2(20),COUNTNUMBER(10),constraintPK_T_ORDER_ITEMprimarykey(ITEM_ID));createindexIDX_ORDER_ITEM_ORDER_IDonT_ORDER_ITEM(ORDER_IDASC);altertableT_ORDER_ITEMaddconstraintFK_T_ORDER__REFERENCE_T_ORDERforeignkey(ORDER_ID)referencesT_ORDER(ORDER_ID);我们承认在ER关系上,这份设计并不存在的缺陷,但却存在以下有待优化的地方:·没有将表数据和索引数据存储到不同的表空间中,而不加区别地将它们存储到同一表空间里。这样,不但会造成I/O竞争,也为数据库的维护工作带来不便。·ORACLE会自动为表的主键列创建一个普通B-Tree索引,但由于这两张表的主键值都通过序列提供,具有严格的顺序性(升序或降序),此时手工为其指定一个反键索引(reversekeyindex)将更加合理。·在子表T_ORDER_ITEM外键列ORDER_ID上
查看更多
mm****酱吖
实名认证
内容提供者
单篇购买
VIP会员(1亿+VIP文档免费下)

扫码即表示接受《下载须知》

试谈优化Oracle库表设计的若干方法

文档大小:311KB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用