SQL等價(jià)改寫優(yōu)化案例精選報(bào)告_第1頁(yè)
SQL等價(jià)改寫優(yōu)化案例精選報(bào)告_第2頁(yè)
SQL等價(jià)改寫優(yōu)化案例精選報(bào)告_第3頁(yè)
SQL等價(jià)改寫優(yōu)化案例精選報(bào)告_第4頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余45頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、SQL 等價(jià)改寫優(yōu)化案例精選一統(tǒng)一天下解釋為:巧用各類技巧合并代碼,減少表掃描次數(shù)。案例 1 注重 COUNT(CASE WHEN) 之類的合并技巧 select distinct ne_state.peer_id peer_name, to_char(ne_state.ne_state) peer_state, (casewhen ne_state.ne_state = 0 thento_char(0)else(select distinct to_char(nvl(ne_active.active, 0)from dcc_sys_log,(select peer_id,decode(act

2、ion,'active',1,'de-active',0,0) active, max(log_time) from dcc_sys_log where action = 'active' or action = 'de-active'group by (peer_id, action) ne_activewhere dcc_sys_log.peer_id = ne_active.peer_id(+) and dcc_sys_log.peer_id = ne_state.peer_id) end) peer_active,(cas

3、ewhen ne_state.ne_state = 0 then to_char(0)else(to_char(nvl(select count(*) from dcc_ne_logwhere dcc_ne_log.result <> 1and peer_id = ne_state.peer_idand log_time betweentrunc(sysdate) and sysdategroup by (peer_id),0)end) err_cnt,(casewhen ne_state.ne_state = 0 thento_char(0)else(to_char(nvl(se

4、lect count(*)from dcc_ne_log in_dnlwhere in_dnl.direction = 'recv'and in_dnl.peer_id =ne_state.peer_idand log_time betweentrunc(sysdate) and sysdate),0)end) recv_cnt,(casewhen ne_state.ne_state = 0 thento_char(0)else(to_char(nvl(select sum(length)from dcc_ne_log in_dnlwhere in_dnl.direction

5、= 'recv'and in_dnl.peer_id =ne_state.peer_idand log_time betweentrunc(sysdate) and sysdate),0)end) recv_byte,(casewhen ne_state.ne_state = 0 thento_char(0)else(to_char(nvl(select count(*)from dcc_ne_log in_dnlwhere in_dnl.direction = 'send'and in_dnl.peer_id =ne_state.peer_idand log_

6、time betweentrunc(sysdate) and sysdate),0)end) send_cnt,(casewhen ne_state.ne_state = 0 thento_char(0)else(to_char(nvl(select sum(length)from dcc_ne_log in_dnlwhere in_dnl.direction = 'send'and in_dnl.peer_id =ne_state.peer_idand log_time betweentrunc(sysdate) and sysdate),0)end) send_bytefr

7、om dcc_ne_log,(select distinct dsl1.peer_id peer_id,nvl(ne_disconnect_info.ne_state, 1) ne_state from dcc_sys_log dsl1,(select distinct dnl.peer_id peer_id,decode(action,'disconnect',0,'connect',0,1) ne_statefrom dcc_sys_log dsl, dcc_ne_log dnlwhere dsl.peer_id = dnl.peer_idand (dsl.

8、action = 'disconnect' anddsl.cause = '關(guān)閉對(duì)端 ') or(dsl.action = 'connect' anddsl.cause = '連接主機(jī)失敗 ')and dsl.log_time =(select max(log_time)from dcc_sys_logwhere peer_id = dnl.peer_idand log_type = ' 對(duì)端交互 ') ne_disconnect_infowhere dsl1.peer_id = ne_disconnect_inf

9、o.peer_id(+) ne_state where ne_state.peer_id = dcc_ne_log.peer_id(+)該 SQL 語(yǔ)句復(fù)雜冗長(zhǎng),從執(zhí)行計(jì)劃可看出該語(yǔ)句執(zhí)行了多次的表掃描和復(fù)雜表連接,讀者應(yīng)該可以看出,當(dāng)前主要的優(yōu)化方案在于如何等價(jià)改寫SQL 以減少表掃描次數(shù)。首先想到本案例中為構(gòu)造出err_cnt , recv_cnt, recv_byte, send_cnt,send_byte 這 5 個(gè)字段而完成的5 個(gè) SQL 結(jié)果集能否簡(jiǎn)化。 由于這些字段都來(lái)自同一張 dcc_ne_log 表,僅是條件不同而已,因此可考慮用 CASE 語(yǔ)句改造代碼,將原來(lái) 5 個(gè)結(jié)果

10、集的寫法改造成 1 個(gè)結(jié)果集的寫法,這樣 dcc_ne_log 這個(gè)大表掃描次數(shù)就由 5 次縮減為 1 次了。經(jīng)適當(dāng)轉(zhuǎn)換,這構(gòu)造 5 個(gè)字段的代碼可改寫如下:select peer_id,COUNT(CASE WHEN RESULT <> 1 THEN 1 END) err_cnt ,COUNT(CASE WHEN direction = 'recv' THEN 1 END) recv_cnt,SUM(CASE WHEN direction = 'recv' THEN length END) recv_byte,COUNT(CASE WHEN dir

11、ection = 'send' THEN 1 END) send_cnt,SUM(CASE WHEN direction = 'send' THEN length END) send_bytefrom dcc_ne_logwhere log_time >=trunc(sysdate)GROUP BY peer_id進(jìn)一步分析如下ne_disconnect_info 結(jié)果集的寫法:select distinct dsl1.peer_id peer_id,nvl(ne_disconnect_info.ne_state, 1) ne_statefrom dcc_

12、sys_log dsl1,(select distinct dnl.peer_id peer_id,decode(action,'disconnect',0,'connect',0,1) ne_statefrom dcc_sys_log dsl, dcc_ne_log dnlwhere dsl.peer_id = dnl.peer_idand (dsl.action = 'disconnect' anddsl.cause = '關(guān)閉對(duì)端 ') or(dsl.action = 'connect' anddsl.cau

13、se = '連接主機(jī)失敗 ')and log_type = ' 對(duì)端交互 'and dsl.log_time =(select max(log_time)from dcc_sys_logwhere peer_id = dnl.peer_idand log_type = ' 對(duì)端交互 ') ne_disconnect_info where dsl1.peer_id = ne_disconnect_info.peer_id(+)為了清晰的將結(jié)構(gòu)展現(xiàn)出來(lái),將上述兩次改造的腳本用 WITH 子句分別封裝為 ne_state和 dcc_ne_log_tim

14、e ,最終整體SQL 語(yǔ)句改寫完畢后,代碼量大大減少的同時(shí)性能極大的提升了,表掃描次數(shù)從總計(jì) 7 次縮減為 2 次,執(zhí)行完成時(shí)間從原先的 300 秒縮短為 5 秒。完整改造后的最終SQL 代碼優(yōu)雅精致,具體如下:with ne_state as(SELECT a.peer_id,CASE WHEN dnl.peer_id IS NOT NULL AND str IN ('disconnect 關(guān)閉對(duì)端 ','connect 連接主機(jī)失敗 ') THEN '0'ELSE'1' END ne_stateFROM (SELECT pee

15、r_id,MIN(action|cause) KEEP(DENSE_RANK LAST ORDER BY log_time) strFROM dcc_sys_log dslWHERE log_type = ' 對(duì)端交互 'GROUP BY peer_id) a,(SELECT DISTINCT peer_id FROM dcc_ne_log) dnl WHERE a.peer_id = dnl.peer_id(+), dcc_ne_log_time as (select peer_id,COUNT(CASE WHEN RESULT <> 1 THEN 1 END)

16、err_cnt ,COUNT(CASE WHEN direction = 'recv' THEN 1 END) recv_cnt,SUM(CASE WHEN direction = 'recv' THEN length END) recv_byte,COUNT(CASE WHEN direction = 'send' THEN 1 END) send_cnt,SUM(CASE WHEN direction = 'send' THEN length END) send_bytefrom dcc_ne_logwhere log_tim

17、e>=trunc(sysdate) -between trunc(sysdate)and sysdateGROUP BY peer_id)select distinct ne_state.peer_id peer_name, to_char(ne_state.ne_state) peer_state, (casewhen ne_state.ne_state = 0 thento_char(0)elseNVL(select '1' from dcc_sys_log where peer_id = ne_state.peer_id and action ='activ

18、e' and rownum=1),'0')end) peer_active,decode(ne_state.ne_state,0,'0',nvl(dnlt.ERR_CNT,0) ERR_CNT, -注意 NVL 改造decode(ne_state.ne_state,0,'0',nvl(dnlt.recv_cnt,0) recv_cnt, decode(ne_state.ne_state,0,'0',nvl(dnlt.recv_byte,0) recv_byte, decode(ne_state.ne_state,0,

19、9;0',nvl(dnlt.send_cnt,0) send_cnt, decode(ne_state.ne_state,0,'0',nvl(dnlt.send_byte,0) send_byte from ne_state ,dcc_ne_log_time dnlt where ne_state.peer_id=dnlt.peer_id(+)案例 2. 注重分析函數(shù)減少表掃描次數(shù),如 KEEP 和 DENSE_RANK 的結(jié)合這個(gè)例子來(lái)自案例 1 中,為了說(shuō)明技巧,特定再次獨(dú)立成一小節(jié)說(shuō)明,案例 1 中的如下部分ne_disconnect_info 結(jié)果集的寫法:se

20、lect distinct dsl1.peer_id peer_id,nvl(ne_disconnect_info.ne_state, 1) ne_statefrom dcc_sys_log dsl1,(select distinct dnl.peer_id peer_id,decode(action,'disconnect',0,'connect',0,1) ne_statefrom dcc_sys_log dsl, dcc_ne_log dnlwhere dsl.peer_id = dnl.peer_idand (dsl.action = 'disc

21、onnect' anddsl.cause = '關(guān)閉對(duì)端 ') or(dsl.action = 'connect' anddsl.cause = '連接主機(jī)失敗 ')and log_type = ' 對(duì)端交互 'and dsl.log_time =(select max(log_time)from dcc_sys_logwhere peer_id = dnl.peer_idand log_type = ' 對(duì)端交互 ') ne_disconnect_info where dsl1.peer_id = ne_

22、disconnect_info.peer_id(+)原先至少需要掃描 2 次!現(xiàn)在根據(jù) KEEP 結(jié)合 DENSE_RANK 的方式,將表掃描從 2 次變?yōu)榱?1 次,具體代碼改寫如下:SELECT a.peer_id,CASE WHEN dnl.peer_id IS NOT NULL AND str IN ('disconnect 關(guān)閉對(duì)端 ','connect 連接主機(jī)失敗 ') THEN'0' ELSE '1' END ne_stateFROM(SELECTpeer_id,MIN(action|cause)KEEP(DENS

23、E_RANK LAST ORDER BY log_time) strFROM dcc_sys_log dslWHERE log_type = ' 對(duì)端交互 'GROUP BY peer_id) a,(SELECT DISTINCT peer_id FROM dcc_ne_log) dnl WHERE a.peer_id = dnl.peer_id(+)案例 3 注重 GROUP BY (CASE WHEN) 之類的合并技巧 select decode(so.sFileName, 'SNP_20', 'SNP', 'HNIC_2',

24、 'HNIC', 'IBRC_2', 'IBRC', 'IISMP_', 'IISMP', 'NIC_20', 'NIC','NIG_20', 'NIG', 'IIC_20', 'IIC', 'HIIC_2', 'HIIC', 'CA.D.A', 'CA.D.ATSR', 'ULH_20', 'ULH', 'IBRST

25、_', 'IBRST', so.sFileName) 業(yè)務(wù)名稱 ,so.sFileCount 合并前文件個(gè)數(shù) , so.sRecordNum 合并前總記錄數(shù) , ta.tFileCount 合并后文件個(gè)數(shù) , ta.tRecordNum 合并后總記錄數(shù) , NVL(so1.sFileCount, 0) 合并前當(dāng)天文件個(gè)數(shù) ,NVL(so1.sRecordNum, 0) 合并前當(dāng)天文件總記錄數(shù) , NVL(so2.sFileCount, 0) 合并前昨天文件個(gè)數(shù) , NVL(so2.sRecordNum, 0) 合并前昨天文件總記錄數(shù) from (select subst

26、r(a.file_name, 1, 6) sfileName, count(*) sFileCount,sum(sRecordNum) sRecordNumfrom (select distinct bsf.file_name,bsf.record_num sRecordNum,bsf.create_timefrom BUSINESS_SEND_FILELIST bsf, IDEP_PLUGIN_AUTO_RELATION iparwhere bsf.file_id = ipar.bus_file_idand trunc(ipar.relation_time) = to_date('2

27、010-08-05', 'yyyy-mm-dd') agroup by substr(a.file_name, 1, 6)order by substr(a.file_name, 1, 6) soLEFT JOIN(select substr(a.file_name, 1, 6) sfileName,count(*) sFileCount,sum(sRecordNum) sRecordNumfrom (select distinct bsf.file_name,bsf.record_num sRecordNum,bsf.create_timefrom BUSINESS_

28、SEND_FILELIST bsf, IDEP_PLUGIN_AUTO_RELATION ipar where bsf.file_id = ipar.bus_file_idand trunc(ipar.relation_time) = to_date('2010-08-05', 'yyyy-mm-dd')AND FILE_NAME LIKE '%20100805%') a group by substr(a.file_name, 1, 6) order by substr(a.file_name, 1, 6) so1 ON (so.sFileNa

29、me = so1.sFileName) LEFT JOIN(select substr(a.file_name, 1, 6) sfileName,count(*) sFileCount,sum(sRecordNum) sRecordNumfrom (select distinct bsf.file_name,bsf.record_num sRecordNum,bsf.create_timefrom BUSINESS_SEND_FILELIST bsf, IDEP_PLUGIN_AUTO_RELATION ipar where bsf.file_id = ipar.bus_file_idand

30、trunc(ipar.relation_time) = to_date('2010-08-05', 'yyyy-mm-dd')AND FILE_NAME not LIKE '%20100805%') a group by substr(a.file_name, 1, 6)order by substr(a.file_name, 1, 6) so2ON (so.sFileName = so2.sFileName)LEFT JOIN(select substr(a.file_name, 1, 6) tFileName, count(*) tFileC

31、ount,sum(record_num) tRecordNumfrom (select distinct ipsf.file_name,ipsf.record_numfrom idep_plugin_send_filelist ipsfwhere trunc(ipsf.create_time) = to_date('2010-08-05', 'yyyy-mm-dd')and remark = '處理成功 ') agroup by substr(a.file_name, 1, 6)order by substr(a.file_name, 1, 6)

32、 taON (so.sFileName = ta.tFileName)where so.sFileName not like 'MVI%'unionselect so.sFileName,so.sFileCount,(so.sRecordNum - (so.sFileCount * 2) sRecordNum,ta.tFileCount,ta.tRecordNum,NVL(so1.sFileCount, 0),(nvl(so1.sRecordNum, 0) - (nvl(so1.sFileCount, 0) * 2), NVL(so2.sFileCount, 0),(nvl(s

33、o2.sRecordNum, 0) - (nvl(so2.sFileCount, 0) * 2) from (select substr(a.file_name, 1, 3) sfileName, count(*) sFileCount,sum(sRecordNum) sRecordNumfrom (select distinct bsf.file_name,bsf.record_num sRecordNum,bsf.create_timefrom BUSINESS_SEND_FILELIST bsf, IDEP_PLUGIN_AUTO_RELATION iparwhere bsf.file_

34、id = ipar.bus_file_idand trunc(ipar.relation_time) = to_date('2010-08-05', 'yyyy-mm-dd') agroup by substr(a.file_name, 1, 3)order by substr(a.file_name, 1, 3) soLEFT JOIN(select substr(a.file_name, 1, 3) sfileName,count(*) sFileCount,sum(sRecordNum) sRecordNumfrom (select distinct bs

35、f.file_name,bsf.record_num sRecordNum,bsf.create_timefrom BUSINESS_SEND_FILELIST bsf, IDEP_PLUGIN_AUTO_RELATION ipar where bsf.file_id = ipar.bus_file_idand trunc(ipar.relation_time) = to_date('2010-08-05', 'yyyy-mm-dd')AND FILE_NAME LIKE 'MVI100805%') a group by substr(a.fil

36、e_name, 1, 3) order by substr(a.file_name, 1, 3) so1 ON (so.sFileName = so1.sFileName)LEFT JOIN(select substr(a.file_name, 1, 3) sfileName,count(*) sFileCount,sum(sRecordNum) sRecordNumfrom (select distinct bsf.file_name,bsf.record_num sRecordNum,bsf.create_timefrom BUSINESS_SEND_FILELIST bsf, IDEP_

37、PLUGIN_AUTO_RELATION ipar where bsf.file_id = ipar.bus_file_idand trunc(ipar.relation_time) = to_date('2010-08-05', 'yyyy-mm-dd')AND FILE_NAME not LIKE 'MVI100805%') a group by substr(a.file_name, 1, 3) order by substr(a.file_name, 1, 3) so2ON (so.sFileName = so2.sFileName)LE

38、FT JOIN(select substr(a.file_name, 1, 3) tFileName,count(*) tFileCount,sum(record_num) tRecordNumfrom (select distinct ipsf.file_name,ipsf.record_numfrom idep_plugin_send_filelist ipsfwhere trunc(ipsf.create_time) = to_date('2010-08-05', 'yyyy-mm-dd')and remark = '處理成功 ') agr

39、oup by substr(a.file_name, 1, 3)order by substr(a.file_name, 1, 3) taON (so.sFileName = ta.tFileName)WHERE so.sFileName = 'MVI'分析1.將trunc(ipar.relation_time)=to_date('2010-08-05','yyyy-mm-dd')等等類似之處改寫為如下,要避免對(duì)列進(jìn)行運(yùn)算,這樣會(huì)導(dǎo)致用不上索引,除非是建立了函數(shù)索引。ipsf.create_time >= to_date('2010

40、-08-05', 'yyyy-mm-dd') and ipsf.create_time < to_date('2010-08-05', 'yyyy-mm-dd')+12可通過(guò)CASE WHEN語(yǔ)句進(jìn)一步減少表掃描次數(shù),如( count(CASE WHEN FILE_NAME LIKE'%20100805%' THEN 1 END) sFileCount1),類似如上的修改,可以等價(jià)改寫,將本應(yīng)用的表掃描從8 次減少為4 次。3. 更進(jìn)一步 利用 group by substr(a.file_name, 1, CASE

41、 WHEN a.file_name like 'MVI%' THEN 3ELSE 6 END) ,可將表掃描從4 次再次減少為2 次最終 SQL 改寫優(yōu)化為:select decode(so.sFileName, 'SNP_20', 'SNP', 'HNIC_2', 'HNIC', 'IBRC_2', 'IBRC', 'IISMP_', 'IISMP', 'NIC_20', 'NIC','NIG_20',

42、 'NIG', 'IIC_20', 'IIC', 'HIIC_2', 'HIIC', 'CA.D.A', 'CA.D.ATSR', 'ULH_20', 'ULH', 'IBRST_', 'IBRST', so.sFileName) 業(yè)務(wù)名稱 ,so.sFileCount 合并前文件個(gè)數(shù),case when so.sfilename like 'MVI%' then (so.sRecordNum - (so

43、.sFileCount * 2) else so.sRecordNum end合并前總記錄數(shù),ta.tFileCount 合并后文件個(gè)數(shù) , ta.tRecordNum 合并后總記錄數(shù) , NVL(so.sFileCount1, 0) 合并前當(dāng)天文件個(gè)數(shù) , case when so.sfilename like 'MVI%'then (nvl(so.sRecordNum1, 0) - (nvl(so.sFileCount1, 0) * 2)else NVL(so.sRecordNum1, 0) end 合并前當(dāng)天文件總記錄數(shù) , NVL(so.sFileCount2, 0)

44、合并前昨天文件個(gè)數(shù) , case when so.sfilename like 'MVI%'then (nvl(so.sRecordNum2, 0) - (nvl(so.sFileCount2, 0) * 2) else NVL(so.sRecordNum2, 0) end 合并前昨天文件總記錄數(shù) from (select substr(a.file_name, 1, CASE WHEN a.file_name like 'MVI%' THEN 3 ELSE 6 END) sfileName,count(*) sFileCount,sum(sRecordNum)

45、 sRecordNum,count(CASE WHEN (FILE_NAME LIKE '%20100805%' AND FILE_NAME not like 'MVI%') OR(FILE_NAME LIKE 'MVI100805%' AND FILE_NAME like 'MVI%') THEN 1 END) sFileCount1,sum (CASE WHEN (FILE_NAME LIKE '%20100805%' AND FILE_NAME not like 'MVI%') OR(FILE

46、_NAME LIKE 'MVI100805%' AND FILE_NAME like 'MVI%') THEN sRecordNum END) sRecordNum1, count(CASE WHEN (FILE_NAME NOT LIKE '%20100805%' AND FILE_NAME not like 'MVI%') OR(FILE_NAME NOT LIKE 'MVI100805%' AND FILE_NAME like 'MVI%') THEN 1 END) sFileCount2,s

47、um (CASE WHEN (FILE_NAME NOT LIKE '%20100805%' AND FILE_NAME not like 'MVI%') OR(FILE_NAME NOT LIKE 'MVI100805%' AND FILE_NAME like 'MVI%') THEN sRecordNum END) sRecordNum2from (select distinct bsf.file_name,bsf.record_num sRecordNum,bsf.create_timefrom BUSINESS_SEND_

48、FILELIST bsf, IDEP_PLUGIN_AUTO_RELATION iparwhere bsf.file_id = ipar.bus_file_idand ipar.relation_time >= to_date('2010-08-05', 'yyyy-mm-dd') and ipar.relation_time < to_date('2010-08-05', 'yyyy-mm-dd')+1) agroup by substr(a.file_name, 1, CASE WHEN a.file_name l

49、ike 'MVI%' THEN 3 ELSE 6 END)order by substr(a.file_name, 1, CASE WHEN a.file_name like 'MVI%' THEN 3 ELSE 6 END) so LEFT JOIN(select substr(a.file_name, 1, CASE WHEN a.file_name like 'MVI%' THEN 3 ELSE 6 END) tFileName,count(*) tFileCount,sum(record_num) tRecordNumfrom (sele

50、ct distinct ipsf.file_name,ipsf.record_numfrom idep_plugin_send_filelist ipsfwhere ipsf.create_time >= to_date('2010-08-05', 'yyyy-mm-dd') and ipsf.create_time < to_date('2010-08-05', 'yyyy-mm-dd')+1 and remark = '處理成功 ') agroup by substr(a.file_name, 1,

51、 CASE WHEN a.file_name like 'MVI%' THEN 3 ELSE 6 END)order by substr(a.file_name, 1, CASE WHEN a.file_name like 'MVI%' THEN 3 ELSE 6 END) taON (so.sFileName = ta.tFileName)案例 4 尋找用 or 替代 union all 的時(shí)機(jī) select peer_id 對(duì)端標(biāo)識(shí) ,null 源域名 ,null 目標(biāo)域名 ,alert_type 告警類型 ,log_time 告警時(shí)間 ,cause 告警內(nèi)

52、容 ,deal_log 處理狀態(tài) ,deal_staff 處理人 ,deal_time 處理時(shí)間 ,remark 備注from dcc_sys_logwhere action = 'disconnect'and cause like '對(duì)端被關(guān)閉 %'and deal_log = 'deal_log'and alert_type = 'alert_type'and log_time >= TO_DATE('2010-08-02', 'YYYY-MM-DD') and log_time <

53、 TO_DATE('2010-08-03', 'YYYY-MM-DD') + 1 union(select peer_id 對(duì)端標(biāo)識(shí) ,origin_host源域名 ,dest_host 目標(biāo)域名 ,alert_type 告警類型 ,log_time 告警時(shí)間 ,cause 告警內(nèi)容 ,deal_log 處理狀態(tài) ,deal_staff 處理人 ,deal_time 處理時(shí)間 ,remark 備注from dcc_ne_logwhere result = 0and cause like 'parser 失敗 %'and deal_log = &#

54、39;deal_log'and alert_type = 'alert_type'and log_time >= TO_DATE('2010-08-02', 'YYYY-MM-DD') and log_time < TO_DATE('2010-08-03', 'YYYY-MM-DD') + 1) union(select peer_id 對(duì)端標(biāo)識(shí) ,origin_host源域名 ,dest_host 目標(biāo)域名 ,alert_type 告警類型 ,log_time 告警時(shí)間 ,cause 告警內(nèi)容

55、 ,deal_log 處理狀態(tài) ,deal_staff 處理人 ,deal_time 處理時(shí)間 ,remark 備注from dcc_ne_logwhere result_code = 'DIAMETER_UNABLE_TO_DELIVER' and svcctx_id like 'SR-Timeout%'and deal_log = 'deal_log'and alert_type = 'alert_type'and log_time >= TO_DATE('2010-08-02', 'YYYY-M

56、M-DD') and log_time < TO_DATE('2010-08-03', 'YYYY-MM-DD') + 1) union(select peer_id 對(duì)端標(biāo)識(shí) ,null 源域名 ,null 目標(biāo)域名 ,alert_type 告警類型 ,log_time 告警時(shí)間 ,cause 告警內(nèi)容 ,deal_log 處理狀態(tài) ,deal_staff 處理人 ,deal_time 處理時(shí)間 ,remark 備注from dcc_sys_logwhere action = 'disconnect'and cause like

57、'接收消息異常 %'and deal_log = 'deal_log'and alert_type = 'alert_type'and log_time >= TO_DATE('2010-08-02', 'YYYY-MM-DD')and log_time < TO_DATE('2010-08-03', 'YYYY-MM-DD') + 1)很明顯,此處的 UNION ALL 完全可以用 OR 來(lái)改造,等價(jià)改寫,減少表掃描次數(shù)。優(yōu)化改造后 SQL 為:select peer_

58、id 對(duì)端標(biāo)識(shí) ,null 源域名 ,null 目標(biāo)域名 ,alert_type 告警類型 ,log_time 告警時(shí)間 ,cause 告警內(nèi)容 ,deal_log 處理狀態(tài) ,deal_staff 處理人 ,deal_time 處理時(shí)間 ,remark 備注from dcc_sys_logwhere action = 'disconnect'and (cause like '對(duì)端被關(guān)閉 %' or cause like ' 接收消息異常 %') and deal_log = 'deal_log'and alert_type =

59、'alert_type'and log_time >= TO_DATE('2010-08-02', 'YYYY-MM-DD') and log_time < TO_DATE('2010-08-03', 'YYYY-MM-DD') + 1 unionselect peer_id 對(duì)端標(biāo)識(shí) ,origin_host源域名 ,dest_host 目標(biāo)域名 ,alert_type 告警類型 ,log_time 告警時(shí)間 ,cause 告警內(nèi)容 ,deal_log 處理狀態(tài) ,deal_staff 處理人 ,deal_time 處理時(shí)間

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論