数据库字典表设计性能问题咨询

我们现在在进行数据库字典表设计时,有二种方式,其一是传统的方式,每个字典表都有ID、Name两字段。第二种方式是将所有字典表的数据放在同一张表中,结构如下:

TypeTable(typeID,typeName)【主表,用来记录字典表表名信息】;DataTable(typeID,DataId,DataName)【从表,记录所有字典表数据信息】

如性别、婚姻状态,在TypeTable中是两条记录,{02,性别},{06,婚姻状态};而在DataTable中各有三条记录{02,0,女 / 02,1,男 / 02,9,其它},{06,0,未婚 / 06,1,已婚 / 06,9,离异}

另有一张病人列表patient(patientID,SexID,MarryStatusID…)

现在需要查询病人信息,sql语句如下:

Select b.DataName as SexName,c.DataName as MarryStatusName

from patient a left join DataTable b on b.DataId=a.SexID and b.typeID=’02’

left join DataTable c on c.DataId=a.MarryStatusId and b.typeID=’06’


在数据库中执行该Sql语句,由于DataTable约1000条左右的数据量,相对第一种方式必将对数据库有一定的影响。

(当然在实际业务中可能类似的字典表约达5-10个,patient的数据量约500w条)


但不知道在一个系统中所有字典表获取数据都采用这种方式对数据库性能到底影响到什么程度,约降低百分之几的性能?会有其它隐患没?
标签: 暂无标签
oracle123

写了 4 篇文章,拥有财富 12,被 1 人关注

转播转播 分享分享 分享淘帖
回复

使用道具

P6 | 发表于 2010-11-3 12:58:37
回复 oracle123 的帖子

你这里面问的是一个多表连接的问题,也是关系型数据库的一个普遍的需要关心的问题。为了数据的一致性(冗余数据容易出现不一致的情况),我们通常采用第二种方式,这也是关系型数据库普遍采用的方式。
你没有必要担心这个问题,因为处理多表连接是关系型数据库最基础的操作,也是作为DBA最基础的功底之一。
多表连接会带来性能的影响,但是如果你的字典表相对较小(你没有说明),多表连接的性能影响很小,相对对大表的访问,可以忽略不计。
将来根据访问数据的特点,会涉及到nested还是hash的问题,这也就涉及索引的问题。
总体影响非常小(即使出现问题,解决方案也相对简单)。
需要你能够读懂执行计划,同时根据执行计划做一些调整,进而影响执行计划。
参考工具:dbms_xplan包(查看执行计划)等。
回复

使用道具

P6 | 发表于 2010-11-3 12:59:47
说明:你问这个问题,说明你对oracle的多表连接的各种技术不是很熟悉,特别是连接的机理。需要好好进步,应该不是我的学生。
回复

使用道具

您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

意见
反馈