优化Oracle库表设计的若干方法.docx
《优化Oracle库表设计的若干方法.docx》由会员分享,可在线阅读,更多相关《优化Oracle库表设计的若干方法.docx(15页珍藏版)》请在第一文库网上搜索。
1、优化OraC1e库表设计的若干方法前言绝大多数的Orac1e数据库性能问题都是由于数据库设计不合理造成的,只有少部分问题根植于DatabaSeBuffer、SharePoo1、Redo1ogBUffCr等内存模块配置不合理,I/O争用,CPU争用等DBA职责范围上。因此除非是面对一个业已完成不可变更的系统,否则我们不应过多地将关注点投向内存、I/O、CPU等性能调整项目上,而应关注数据库表本身的设计是否合理,库表设计的合理性才是程序性能的真正执牛耳者。合理的数据库设计需要考虑下列的方面: 业务数据以何种方式表达。如一个员工有多个Emai1,你能够在EMP1OYEE表中建立多个Emai1字段如e
2、mai1、emai1_2、emai1_3,也能够创建一个TEMA11子表来存储,甚至能够用逗号分隔开多个Emai1地址存放在一个字段中。 数据以何种方式物理存储。如大表的分区,表空间的合理设计等。 如何建立合理的数据表索引。表索引几乎是提高数据表查询性能最有效的方法,Orac1e拥有类型丰富的数据表索引类型,如何取舍选择显得特别重要。本文我们将目光要紧聚焦于数据表的索引上,同时也将提及其他两点的内容。通过对一个简单的库表设计实例的分析引出设计中的不足,并逐一改正。考虑到手工编写库表的SQ1脚本原始且低效,我们将用目前最流行的库表设计工具PowerDesigner10来讲述表设计的过程,因此在本
3、文中你还会熟悉到一些有关的PowerDesigner的使用技巧。一个简单的例子某个开发人员着手设计一个订单的系统,这个系统中有两个要紧的业务表,分别是订单基本信息表与订单条目表,这两张表具有主从关系的表,其中TORDER是订单主表,而TJ)RDERTEM是订单条目表。数据库设计人员的设计成果如图1所示:TqRDERRr-REFERENC!.ORDERJTeMORDRJDNUmBER(IO)ADDRESSVRCHM2(10Q)C1IENTV炽CHM2(60)ORDER_DATECHIS.SHIPPEDCHMa)ITEMJDNMBR(10)pkORDERJDNMR(1O)ITEMVWeHM2(20
4、)COUNTNUMR(10)国IDX.ORDERJTEM-ORDERJDSDX.ORDER.COMPOSITE图1订单主从表ORDER_ID是订单号,为ORDER的主键,通过名为SEQ_ORDER_ID的序列产生键值,而ITEM_ID是TJ)RDERJTEM表的主键,通过名为SEQJ)RDERJTEM的序列产生键值,T_ORDER_ITEM通过ORDER_ID外键关联到TJ)RDER表。需求文档指出订单记录将通过下列两种方式来查询数据:C1IENT+ORDER_DATE+IS_SHPPED:根据客户+订货日期+是否发货条件查询订单及订单条目。ORDER_DATE+IS_SHIPPED:根据订货
5、日期+是否发货条件查询订单及订单条目。数据库设计人员根据这个要求,在TJ)RDER表的C1IENT.0RDER_DATE及IS_SHPPED三字段上建立了一个复合索引IDX_0RDER_C0MP0SITE;在TJ)RDER_ITEM为外键0RDERD建立IDX_0RDER_ITEM_0RDER_ID索引。让我们看一下该份设计的最终SQ1脚本:产订单表*/createtab1eT_ORDER(ORDERJDNUMBER(10)notnu11,ADDRESSVARCHAR2(100),C1IENTVARCHAR2(60),ORDER_DATECHAR(8),IS.SHIPPEDCHAR(I),co
6、nstraintPK_T_ORDERprirnarykey(ORDER-ID);createindexIDX,C1IENTonT_ORDER(C1IENTASC,ORDER_DATEASC,IS.SHIPPEDASC);产订单条目子表*/createtab1eT_ORDER_ITEM(ITEMJDNUMBER(10)notnu11,ORDERDNUMBER(10),ITEMVARCHAR2(20),COUNTNUMBER(10),constraintPK_T_ORDER_ITEMprimarj,key(ITEM_ID);createindexIDX_ORDER_ITEM_ORDER_IDonT
7、_ORDER_ITEM(ORDERJDASC);a1tertab1eT_ORDER_ITEMaddconstraintFK_T_ORDER_REFERENCE_T_ORDERforeignkey(0RDER-ID)referencesT_ORDER(ORDER_ID);我们承认在ER关系上,这份设计并不存在的缺陷,但却存在下列有待优化的地方:没有将表数据与索引数据存储到不一致的表空间中,而不加区别地将它们存储到同一表空间里.这样,不但会造成I/O竞争,也为数据库的保护工作带来不便。ORAC1E会自动为表的主键列创建一个普通B-Tree索引,但由于这两张表的主键值都通过序列提供,具有严格的顺序性
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 优化 Oracle 设计 若干 方法