从接收负责运维项目以来,用户总是会提出各种优化课题。
数据库服务器,应用服务器的管理由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结果就出来了。