從接收負責運維項目以來,用戶老是會提出各類優化課題。數據庫
數據庫服務器,應用服務器的管理由basis負責,本身申請去查看數據庫執行日誌幾乎是不可能的事情,無奈只能不斷的看代碼,分析代碼,一行一行。服務器
針對近期遇到的問題作一下記錄session
①oracle標準時間格式的比較比字符串格式的時間的比較效率要高的多。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';ip
又根據需求添加索引後10多S結果就出來了。字符串