系统优化心得(一)

从接收负责运维项目以来,用户总是会提出各种优化课题。

数据库服务器,应用服务器的管理由basis负责,自己申请去查看数据库执行日志几乎是不可能的事情,无奈只能不断的看代码,分析代码,一行一行。

针对近期遇到的问题做一下记录

①oracle标准时间格式的比较比字符串格式的时间的比较效率要高的多。

② join...on的后面如果是只有一个条件,使用单值索引

 select * FROM scf2.A  a
  INNER JOIN scf2.B  b
     ON b.sessionid = a.sessionid
  INNER JOIN scf2.E  e
     ON substr(e.c_pzh, 3, 10) = b.gr_gi_slip_no
  WHERE 1 = 1   
    AND B.PSTNG_DATE >= '2015.01.11'
    AND B.PSTNG_DATE <= '2015.01.12'
    AND B.doc_date >= '2015.01.01'
    AND B.doc_date <= '2015.01.12'
    AND a.plant = '8812'
    AND a.status IN ('3')
    AND A.STGE_LOC = '2103';

居然跑了5分钟都没有看到结果展现。

改成

 AND a.plant = '8812'
    AND a.status IN ('3')
    AND A.STGE_LOC = '2103';
    ON substr(e.c_pzh, 3, 10) = b.gr_gi_slip_no
 WHERE 1 = 1   
   AND to_date(B.PSTNG_DATE, 'yyyy.mm.dd') >=
       to_date('2015.01.01', 'yyyy.mm.dd')
   AND to_date(B.PSTNG_DATE, 'yyyy.mm.dd') <=
       to_date('2015.02.01', 'yyyy.mm.dd')
   AND to_date(B.doc_date, 'yyyy.mm.dd') >=
       to_date('2015.01.01', 'yyyy.mm.dd')
   AND to_date(B.doc_date, 'yyyy.mm.dd') <=
       to_date('2015.02.01', 'yyyy.mm.dd')
    AND a.plant = '8812'
    AND a.status IN ('3')
    AND A.STGE_LOC = '2103';

又根据需求添加索引后10多S结果就出来了。

posted @ 2015-01-13 18:28  lover6796  阅读(221)  评论(0编辑  收藏  举报