1.用Sql Index替代logical file,因为前者会带来每次读64k,而logical file只能每次8k.sql index 有两种方式,evi 和rdi,具体的差别得找资料,正常的都是rdx。一般都可以通过create index来创建。 http://www-900.ibm.com/cn/support/nav/200303/p17.shtml
2.v5r3的 sqe(sql query enginee)比 cqe(classical query enginee)来的好一些。
3.针对查询速度慢的,放到navigator的run sql script,运行,然后Visual explain 来查看是否有什么建议的操作,比如建议的索引。
4.假如是varchar的字段,假如该字段需要索引,那么一定要用 Allocate(长度),这样变长的数据就和固定长度的放在一起,否则,是分开存储的。
5.c/s架构的,尽可能的用单Connection,然后,command尽可能prepare ,然后执行多次。
假如用java,一定用preparestatement替换statement,而且preparestatement可以addbatch() executebatch(),这样可以减少往返。.net最好用command.deriveparameter。还有,不要用静态的查询语句,那样的sql statement,iseries不能自动prepare.
由于.net没有可以addbatch的方法,所以只能通过prepare来提升性能。现在是update的方式比较少,比较多delete insert,如何减少这些语句是一个要害,可以减少很多往返。update可以通过判定数据修改后和修改前是否一致来达到减少update的次数,这些可以在基类中处理,明日找时间想想明确的方法--不一定有时间,还有一些urgent rpg的程序要修改。
6.适当的使用db monitor,来跟踪,来发现最消耗时间的操作,尽可能的减少TableScan.
7.可能有一个方法,begin xxx;xxxx; end 来包括sql,可能可以,或者用insert table values(1,xxx,xxx),(2,xxx,xxx)这样来提交一个数组。经过测试,不可行。
8.正常我们是根据sql创建索引,但是如何才能创建出perfect index呢?
规则 where子句的= and 的在第一位,> < >= <= like在后,通常这些索引的建议
我们可以在navigator-run sql script -贴入sql语句-explain only,这样可以看到sql真正的解析,似乎还能看到index advisor,statics advisor.非凡是在sum avg等函数需要自动化统计,这样能够提升速度,减少内存分配,让查询引擎能够比较准确地定位和选择查询方案。
9.看到ibm建议使用unicode,目前还没有测试过,原因:由于客户端一般使用unicode作为内码,所以,假如db也是unicode的话,那么,可以减少内码转化的过程。当然了,不好的就是,牺牲硬盘的空间,unicode需要占用两个字节,普通的只需要一个字节。
10.sql创建的表优势:
更多的数据类型
更快的查询速度
缺点
插入速度比较慢
11.sql trigger优点
保证某些数据的正确性,把一些逻辑放在服务器上,非凡对于历史数据某些需要维护的,可能会比较方便
缺点:一般会带来多一次的i/o,每次对应的事件,数据库都会去检索是否符合条件,假如符合,执行。效率可能会比较慢一些,个人不是很喜欢用trigger.
12.存储过程,优点
复杂的逻辑可以封装在服务器,可以一次修改,避免逻辑分散在应用程序中,对于sql语句可能会快很多
缺点:不利于做系统迁移。
13.假如我们是在服务器端Insert一个表的数据到另外一个表,那么,最好
Insert into tablea
Select xxx,xxx,xxx from tableb wherekey=xxx
14.假如是Delete ,那么不要一条一条的delete,可以根据某些要害字来更新针对这些要害字,可以在DataSet中用Column 的 ExtendProperty来保存。