400查询优化--持续补充中

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 where  key=xxx
14.
    如果是Delete ,那么不要一条一条的delete,可以根据某些关键字来更新
    针对这些关键字,可以在DataSet中用Column 的 ExtendProperty来保存。
15.善用navigator,如果发现某些job很耗cpu或者很消耗时间,那么monitor这个job,让那个job运行5分钟左右,然后endmotior,分析结果,找运行时间长的,visual explain ,然后看看advitor建议收集什么信息,或者创建什么索引。这个最有用,有时候,我们写sql语句,不注意索引,就导致一些比较核心的业务很慢,适当的索引可以让查询速度得到极大的提升。今天下午就montior某个job,然后让原本需要5秒的查询,在一秒钟就执行完了。

你可能感兴趣的:(查询优化)