• 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秒的查询,在一秒钟就执行完了。

  • 相关阅读:
    WP7编译问题:The application could not be launched for debugging
    cocos2dxnaTweeJump学习笔记1(都是自己看别人代码后所感所想,希望有懂的人指出我的错误或者大家交流交流)
    判断datatalbe是否为空
    SOAP协议基础(转自Ksxs's )
    那些年我还不懂:IList,ICollection,IEnumerable,IEnumerator,IQueryable(转)
    MyEclipse中 智能提示 JSP 页面的html 标记属性值
    MyEclipse中设置智能提示
    MyEclipse快捷键大全
    向朋友借钱:文章值得一读,让人思索良久
    生存逼着我成功
  • 原文地址:https://www.cnblogs.com/wildfish/p/219161.html
Copyright © 2020-2023  润新知