My FAQ,最新最全的IT技术FAQ
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 未整理篇 | 技术讨论
  当前位置: > 操作系统 > IBM Server
400查询优化
作者:未知 时间:2005-09-13 15:53 出处:ChinaUnix.net 责编:My FAQ
              摘要: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来保存。

 nhxingliang 回复于:2005-08-22 08:22:14
非常感谢啦!!!

 大肥肥 回复于:2005-08-22 11:29:50
麻烦请教wildfish,
Sql Index在AS400上的DB400怎么定义?是不是就是KEY,还是别的什么?怎么使用?
谢谢!

 xuguopeng 回复于:2005-08-22 12:14:20
CREATE INDEX

 大肥肥 回复于:2005-08-22 14:18:20
谢谢,多说两句:
我查过sql的说明,sql server会自动产生index在某些约束上(比如主键和unique约束),是不是db400也会这么做? 比如在LF,因为我在我们这里的系统上从来没有发现谁应用过index.

 wildfish 回复于:2005-08-22 23:07:59
主键,unique的约束可以在dds里面定义,
sql创建的表优势:
  更多的数据类型
  更快的查询速度
缺点
  插入速度比较慢

sql trigger优点
  保证某些数据的正确性,把一些逻辑放在服务器上,特别对于历史数据某些需要维护的,可能会比较方便
缺点
  一般会带来多一次的i/o,每次对应的事件,数据库都会去检索是否符合条件,如果符合,执行。效率可能会比较慢一些,个人不是很喜欢用trigger.
存储过程,优点
   复杂的逻辑可以封装在服务器,可以一次修改,避免逻辑分散在应用程序中,对于sql语句可能会快很多
缺点
   不利于做系统迁移。

 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 myfaq.com.cn All rights reserved. www.myfaq.com.cn 版权所有