• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

400查询优化

发布: 2007-6-08 22:43 | 作者: seanhe | 来源: | 查看: 19次 | 进入软件测试论坛讨论

领测软件测试网
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语句可能会快很多
缺点
   不利于做系统迁移。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网