background image

三、数据库设计与开发之设计技巧

1.分类拆分数据量大的表。

对于经常使用的表(如某些参数表或代码对照表),由于其使用频率很高,要尽量减少表中的记录数

量。例如,银行的户主账表原来设计成一张表,虽然可以方便程序的设计与维护,但经过分析发现,由于

数据量太大,会影响数据的迅速定位。如果将户主账表分别设计为活期户主账、定期户主账及对公户主账等

则可以大大提高查询效率。

2.索引设计。

对于大的数据库表,合理的索引能够提高整个数据库的操作效率。在索引设计中,索引字段应挑选重

复值较少的字段;在对建有复合索引的字段进行检索时,应注意按照复合索引字段建立的顺序进行。

例如,如果对一个5万多条记录的流水表以日期和流水号为序建立复合索引,由于在该表中日期的重

复值接近整个表的记录数,用流水号进行查询所用的时间接近3秒;而如果以流水号为索引字段建立索引

进行相同的查询,所用时间不到1秒。因此在大型数据库设计中,只有进行合理的索引字段选择,才能有

效提高整个数据库的操作效率。

3.数据操作的优化。

在大型数据库中,如何提高数据操作效率值得关注。例如,每在数据库流水表中增加一笔业务,就必

须从流水控制表中取出流水号,并将其流水号的数值加一。正常情况下,单笔操作的反应速度尚属正常,

但当用它进行批量业务处理时,速度会明显减慢。

经过分析发现,每次对流水控制表中的流水号数值加一时都要锁定该表,而该表却是整个系统操作的

核心,有可能在操作时被其他进程锁定,因而使整个事务操作速度变慢。对这一问题的解决的办法是,根

据批量业务的总笔数批量申请流水号,并对流水控制表进行一次更新,即可提高批量业务处理的速度。另

一个例子是对插表的优化。

对于大批量的业务处理,如果在插入数据库表时用普通的Insert语句,速度会很慢。其原因在

于,每次插表都要进行一次I

/O操作,花费较长的时间。改进后,可以用Put语句等缓冲区形式等满页

后再进行I

/O操作,从而提高效率。对大的数据库表进行删除时,一般会直接用Delete语句,这个

语句虽然可以进行小表操作,但对大表却会因带来大事务而导致删除速度很慢甚至失败。解决的方法是去

掉事务,但更有效的办法是先进行Drop操作再进行重建。

4.数据库参数的调整。

数据库参数的调整是一个经验不断积累的过程,应由有经验的系统管理员完成。以Informix

数据库为例,记录锁的数目太少会造成锁表的失败;逻辑日志的文件数目太少会造成插入大表失败等,这

些问题都应根据实际情况进行必要的调整。

5.必要的工具。

在整个数据库的开发与设计过程中,可以先开发一些小的应用工具,如自动生成库表的头文件、插入

数据的初始化、数据插入的函数封装、错误跟踪或自动显示等,以此提高数据库的设计与开发效率。

6.避免长事务。

对单个大表的删除或插入操作会带来大事务,解决的办法是对参数进行调整,也可以在插入时对文件

进行分割。对于一个由一系列小事务顺序操作共同构成的长事务(如银行交易系统的日终交易),可以由