资讯   |   开发   |   选机中心   |   产品大全 | IBM | 惠普 | 联想 | 戴尔 | 苹果 | 神舟
更多: | 华硕 | 明基 | 方正 | 紫光 | TCL | 夏新 | 联宝 | 宏碁 | 七喜 | 长城 | 清华同方 | 海尔 | 三星 | 东芝 | 索尼 | 富士通 | LG | 技术 | ddnoon
当前位置:笔记本 > 软件开发 >
Advertisement
文章正文

请教各位兄弟,这样的DB设计有没有问题?

类型:转载   责任编辑:asp.net   日期:2007/05/23


热门软件下载:


   

1、TGBase、TUnit、TGJob表   有上百万条记录,TBaseCode表有上万条记录  
  2、查找时TGBase、TUnit、TGJob三张表各有一主键互相关联,而TGBase会有七个字段关联到TBaseCode。  
  感觉效率不高,是我们老大设计的,请各位兄弟评价一下。

网友回答:

发表者:zyljlu

两个表间用七个字段关联感觉有点太夸张了,冗余是不是太多了?

发表者:ITpassport

关联太多会影响速度  
  另外查询的时候注意下技巧  
  选择最有效率的表名顺序(只在基于规则的优化器中有效)    
  ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表   driving   table)将被最先处理.   在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.当ORACLE处理多个表时,   会运用排序及合并的方式连接它们.首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行派序,然后扫描第二个表(FROM子句中最后第二个表),最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并.    
  例如:    
  表   TAB1   16,384   条记录    
  表   TAB2   1   条记录    
  选择TAB2作为基础表   (最好的方法)    
  select   count(*)   from   tab1,tab2    
  选择TAB2作为基础表   (不佳的方法)    
  select   count(*)   from   tab2,tab1    
  如果有3个以上的表连接查询,   那就需要选择交叉表(intersection   table)作为基础表,   交叉表是指那个被其他表所引用的表.      
     
  出处   www.dbasupport.com

发表者:dinya2003

同一个表有七个字段关联?   七个字段组合起来唯一?       是不是当初表结构设计的不大好.

发表者:wuzd

表能细化,再细化,不能细化也没办法了,

发表者:lialin

有七个字段是比较有点不合适!不过如果定型不好改的话也只能在这个基础上来进行优化了!

发表者:armorking2003

提供一个思路  
   
  假定:TGBase会有七个字段col1、col2、。。。col7关联到TBaseCode的某一个字段KeyCol  
              并且关联条件可写成如下形式:  
              TGBase.col1   ||   TGBase.col2   ||   TGBase.col3   ||   TGBase.col4   ||   TGBase.col5   ||   TGBase.col6   ||   TGBase.col7   =   TBaseCode.KeyCol  
   
   
   
  那么,可以用函数索引进行优化  
  建立一个函数索引:  
   
   
  CREATE   INDEX   INDEX1_TGBASE   ON   TGBase  
  (  
          col1   ||   col2   ||   col3   ||   col4   ||   col5   ||   col6   ||   col7         ASC  
  )   TABLESPACE   INDX    
  STORAGE(INITIAL   50M   NEXT   10M   MINEXTENTS   1)  
  ;  
   
   
 


 

 
热门推荐笔记本: IBM笔记本
相关文章:
webmaster:popbb@126.com   最佳浏览:1024X768 MSIE
©2007 popbb.net All Rights Reserved