欢迎来到天天文库
浏览记录
ID:56015079
大小:101.00 KB
页数:21页
时间:2020-03-15
《INFORMIX数据库培训教材(高级).doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、INFORMIX数据库培训教材(高级)第一部分:INFORMIX数据库性能调整一.程序及数据的性能调整1.索引在数据库中,索引对效率的影响可以说是决定性的。所以,索引使用的好坏直接影响系统的效率。每一索引的建立都要根据系统的使用综合考虑,哪些语句使用最频繁,这些语句的where条件是什么,对当前表的更新频率如何。在索引的建立过程中,能够建成unique索引的,最好建成unique索引,举例说明:假设在业务系统中,check_info表是核保信息表,有保单号(bm_cert)字段,在投保单登录前,此字段无值。若将此字段置为空,则登录前的投保单的保单号(bm_cert)均为空,就不能建唯一索引。
2、此时若改变策略,将投保单时的保单号置为投保单号,(投保单号与保单号不会重复),则bm_cert字段就可建唯一索引,大大提高了连表查询速度。对唯一索引可根据需要建成聚类,语法如下:createclusterindexid_persononperson(insure_nu);alterindexid_persontoclusteralterindexid_persontonotcluster聚类使数据的物理存储顺序与索引一致,减少取数的读盘次数,从而提高效率。2.关于withhold在游标中,如果在循环体内使用了事物,该游标的声明必须使用withhold。否则该游标在事物后会被关闭。为此,可能习
3、惯在声明游标时加上withhold,不管内部是否有事物。这种做法对单处理器机器可能没什么影响,但对多处理器机器就有影响了。因为使用withhold后,就不能使用并行查询。也就是说,用了withhold后,pdq不能起作用。因此,对于游标内未使用事物的,建议最好不要使用withhold。3.关于隔离级别隔离级别设成脏读,可提高查询速度。若对某表查询,而该表的更新频率较高,这时在查询前设置setisolationtodirtyread可使查询速度大大提高。但要注意脏数据。有两种情况可以这样使用(1)不怕读到脏数据,有脏数据也没有关系。(2)确信读不到脏数据。例如,假设在业务系统中,对rtdz2(
4、单证状态表)表的更新比较频繁,而且此表的记录数也比较多,在很多情况下又要对该表进行实时查询。在更新时要锁记录,那么查询只好setlockmodetowait,这样查询速度将会受到很大影响。只好将隔离级别设成脏读。为了保证实时数据不是脏数据,那么我们必须确保一点:系统中所有对rtdz2的更新的语句都在事物的最后一句。而业务系统中已经做到了这一点。事实证明,此处效率的提高是显著的。4.关于事物事物的作用相信大家都明白,这里就不再说明了。但在使用事物的时候,为了尽量减少锁表时间,事物中的语句应尽量少。因此在beginwork内最好只有更新语句update,delete,insert等。而一些预备工
5、作如查询,计算等都应放在beginwork外。5.关于数据分割当某一表的数据量较大时,可考虑用数据分割的方式来提高效率。数据分割就是将某一表的数据根据一定的条件放入不同的dbspace,若这些不同的dbspace在不同的物理盘上效果会更好。数据分割的用法如下所示:createtablerta14(bm_certchar(15),bm_typechar(6),bm_waychar(1),je_paydecimal(12,2),rq_paytodate,rq_lqstartdate,flagchar(5),age_minsmallint,age_maxsmallint,lj_paydecimal
6、(16,2))fragmentbyexpression((bm_cert<='002999999999999')OR(bm_cert>='990999999999999'))indatadbs1,((bm_cert>'002999999999999')AND(bm_cert<='099999999999999'))indatadbs2,((bm_cert>'099999999999999')AND(bm_cert<='599999999999999'))indatadbs3,((bm_cert>'599999999999999')AND(bm_cert<'990999999999999'))
7、indatadbs4extentsize38566nextsize3856lockmodepage;6.关于语句写法语句的效率与SQL语句的写法有很大关系。在几种写法中选择一个合适的写法相当重要,有时效率会急剧提高。因此,在效率有问题的地方多检查自己语句的写法,有可能会取得重大突破。以下是一些实例:(1).在保单表中查找“003”险种的“0101”区站的数据select*fromrta1wherebm_cer
此文档下载收益归作者所有