oracle-sql优化-通过分组和缓存减少不必要的读
生活随笔
收集整理的這篇文章主要介紹了
oracle-sql优化-通过分组和缓存减少不必要的读
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
環境:aix 7.1,oracle12.1.0.2 cdb
優化前SQL
select *from (select row_.*, rownum rownum_from (select '弱覆蓋' as questionType,city_name as cityName,county_name as countyName,grid_id as gridId,'LTE' as netWorkTypefrom (select city_name,county_name,grid_id,casewhen rsrpSum > 0 and counts > 0 andrsrpSum / counts < 0.95 then1else0end rfgSumfrom (select city_name,county_name,grid_id,sum(rsrp_value) rsrpSum,count(grid_id) countsfrom (select casewhen LTE_RSRP > -105 then1else0end rsrp_value,city_name,county_name,grid_idfrom SJCL.measured_datawhere IS_MACRO_STATION = 1and grid_id is not nulland terminal_upload_time >=to_date('2017-12-02 00:00:00','yyyy/mm/dd hh24:mi:ss')and terminal_upload_time <=to_date('2017-12-02 23:59:59','yyyy/mm/dd hh24:mi:ss')) t1group by t1.city_name,t1.county_name,t1.grid_id) t2) t3where rfgSum >= 1group by city_name, county_name, grid_idunion allselect '無主控覆蓋' as questionType,city_name as cityName,county_name countyName,grid_id gridId,'LTE' as netWorkTypefrom (select casewhen ci_count / grid_count > 0.3 then1else0end gr_ci,city_name,county_name,grid_id,LTE_CIfrom (select count(casewhen t1.network_type = 'LTE' thent1.lte_ciwhen t1.network_type = 'GSM' thent1.gsm_cidwhen t1.network_type = 'TD' thent1.td_cidelsenullend) ci_count,(select count(grid_id)from SJCL.measured_datawhere grid_id = t1.grid_idand IS_MACRO_STATION = 1and terminal_upload_time >=to_date('2017-12-02 00:00:00','yyyy/mm/dd hh24:mi:ss')and terminal_upload_time <=to_date('2017-12-02 23:59:59','yyyy/mm/dd hh24:mi:ss')) grid_count,t1.city_name,t1.county_name,t1.grid_id,LTE_CIfrom SJCL.measured_data t1where t1.grid_id is not nulland t1.IS_MACRO_STATION = 1and terminal_upload_time >=to_date('2017-12-02 00:00:00','yyyy/mm/dd hh24:mi:ss')and terminal_upload_time <=to_date('2017-12-02 23:59:59','yyyy/mm/dd hh24:mi:ss')group by t1.city_name,t1.county_name,t1.grid_id,t1. LTE_CI) t2) t3group by city_name, county_name, grid_idhaving sum(gr_ci) >= 3union allselect '質差' as questionType,city_name as cityName,county_name as countyName,grid_id as gridId,'LTE' as netWorkTypefrom (select city_name,county_name,grid_id,casewhen rsrpSum > 0 and counts > 0 andrsrpSum / counts > 0.05 then1else0end rfgSumfrom (select city_name,county_name,grid_id,sum(rsrp_value) rsrpSum,count(grid_id) countsfrom (select casewhen LTE_RSRP > -100 andLTE_SINR < 0 then1else0end rsrp_value,city_name,county_name,grid_idfrom SJCL.measured_datawhere IS_MACRO_STATION = 1and grid_id is not nulland terminal_upload_time >=to_date('2017-12-02 00:00:00','yyyy/mm/dd hh24:mi:ss')and terminal_upload_time <=to_date('2017-12-02 23:59:59','yyyy/mm/dd hh24:mi:ss')) t1group by t1.city_name,t1.county_name,t1.grid_id) t2) t3where rfgSum >= 1group by city_name, county_name, grid_idunion allselect '越區覆蓋' as questionType,city_name as cityName,county_name as countyName,grid_id as gridId,'LTE' as netWorkTypefrom (select tc.*, tl.latitude, tl.longitudefrom (select *from (select t.city_name,t.county_name,t.grid_id,t. LTE_CI,t. LTE_TAC,nvl(t.grid_longitude, 0) grid_longitude,nvl(t.grid_latitude, 0) grid_latitude,count(LTE_CI) /(select count(grid_id)from SJCL.measured_data awhere a.grid_id = t.grid_idand a.is_macro_station = 1and terminal_upload_time >=to_date('2017-12-02 00:00:00','yyyy/mm/dd hh24:mi:ss')and terminal_upload_time <=to_date('2017-12-02 23:59:59','yyyy/mm/dd hh24:mi:ss')) as ci_ratiofrom SJCL.measured_data twhere t.grid_id is not nulland t.is_macro_station = 1and t.grid_longitude is not nulland t.grid_latitude is not nulland LTE_CI is not nulland LTE_TAC is not nulland terminal_upload_time >=to_date('2017-12-02 00:00:00','yyyy/mm/dd hh24:mi:ss')and terminal_upload_time <=to_date('2017-12-02 23:59:59','yyyy/mm/dd hh24:mi:ss')group by t.city_name,t.county_name,t.grid_id,t. LTE_CI,t. LTE_TAC,t.grid_longitude,t.grid_latitude)where ci_ratio > 0.6) tc,SJCL.tdl_cm_cell tlwhere REGEXP_SUBSTR(tl.ci, '[^-]+', 1, 3) * 256 +REGEXP_SUBSTR(tl.ci, '[^-]+', 1, 4) = tc.lte_ciand tl.ENBAJ08 = tc.lte_tac) ttwhere exists (select *from (select count(1) as siteNumfrom SJCL.tdl_cm_cellwhere region_name = tt.city_nameand ((longitude >= tt.longitude andlongitude < tt.grid_longitude) or(longitude < tt.longitude andlongitude >= tt.grid_longitude))and ((latitude >= tt.latitude andlongitude < tt.grid_latitude) or(latitude < tt.latitude andlatitude >= tt.grid_latitude)))where siteNum > 4)) row_where rownum <= 100)where rownum_ >= 90執行計劃如下:
Plan Hash Value : 4283313742 ---------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost | Time | ---------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 100 | 41200 | 8556469 | 00:05:35 | | * 1 | VIEW | | 100 | 41200 | 8556469 | 00:05:35 | | * 2 | COUNT STOPKEY | | | | | | | 3 | VIEW | | 2983 | 1190217 | 8556469 | 00:05:35 | | 4 | UNION-ALL | | | | | | | 5 | HASH GROUP BY | | 994 | 10934 | 1106 | 00:00:01 | | 6 | VIEW | | 994 | 10934 | 1106 | 00:00:01 | | * 7 | FILTER | | | | | | | 8 | HASH GROUP BY | | 994 | 25844 | 1106 | 00:00:01 | | 9 | PARTITION RANGE SINGLE | | 19877 | 516802 | 1104 | 00:00:01 | | * 10 | TABLE ACCESS FULL | MEASURED_DATA | 19877 | 516802 | 1104 | 00:00:01 | | * 11 | FILTER | | | | | | | 12 | SORT AGGREGATE | | 1 | 15 | | | | 13 | PARTITION RANGE SINGLE | | 16 | 240 | 1104 | 00:00:01 | | * 14 | TABLE ACCESS FULL | MEASURED_DATA | 16 | 240 | 1104 | 00:00:01 | | 15 | HASH GROUP BY | | 994 | 13916 | 8551024 | 00:05:35 | | 16 | VIEW | | 19877 | 278278 | 8551024 | 00:05:35 | | 17 | HASH GROUP BY | | 19877 | 775203 | 8551024 | 00:05:35 | | 18 | PARTITION RANGE SINGLE | | 19877 | 775203 | 1104 | 00:00:01 | | * 19 | TABLE ACCESS FULL | MEASURED_DATA | 19877 | 775203 | 1104 | 00:00:01 | | 20 | HASH GROUP BY | | 994 | 10934 | 1106 | 00:00:01 | | 21 | VIEW | | 994 | 10934 | 1106 | 00:00:01 | | * 22 | FILTER | | | | | | | 23 | HASH GROUP BY | | 994 | 28826 | 1106 | 00:00:01 | | 24 | PARTITION RANGE SINGLE | | 19877 | 576433 | 1104 | 00:00:01 | | * 25 | TABLE ACCESS FULL | MEASURED_DATA | 19877 | 576433 | 1104 | 00:00:01 | | * 26 | FILTER | | | | | | | 27 | HASH GROUP BY | | 1 | 91 | 3233 | 00:00:01 | | * 28 | FILTER | | | | | | | * 29 | HASH JOIN | | 59 | 5369 | 2168 | 00:00:01 | | 30 | PARTITION RANGE SINGLE | | 387 | 16641 | 1104 | 00:00:01 | | * 31 | TABLE ACCESS FULL | MEASURED_DATA | 387 | 16641 | 1104 | 00:00:01 | | 32 | TABLE ACCESS FULL | TDL_CM_CELL | 216734 | 10403232 | 1063 | 00:00:01 | | 33 | VIEW | | 1 | | 1064 | 00:00:01 | | * 34 | FILTER | | | | | | | 35 | SORT AGGREGATE | | 1 | 18 | | | | * 36 | TABLE ACCESS FULL | TDL_CM_CELL | 1 | 18 | 1064 | 00:00:01 | | 37 | SORT AGGREGATE | | 1 | 15 | | | | 38 | PARTITION RANGE SINGLE | | 16 | 240 | 1104 | 00:00:01 | | * 39 | TABLE ACCESS FULL | MEASURED_DATA | 16 | 240 | 1104 | 00:00:01 | ----------------------------------------------------------------------------------------------------Predicate Information (identified by operation id): ------------------------------------------ * 1 - filter("ROWNUM_">=90) * 2 - filter(ROWNUM<=100) * 7 - filter(CASE WHEN (SUM(CASE WHEN TO_NUMBER("LTE_RSRP")>(-105) THEN 1 ELSE 0 END )>0 AND COUNT("GRID_ID")>0 AND SUM(CASE WHEN TO_NUMBER("LTE_RSRP")>(-105) THEN 1 ELSE 0 END)/COUNT("GRID_ID")<0.95) THEN 1 ELSE 0 END >=1) * 10 - filter("GRID_ID" IS NOT NULL AND "IS_MACRO_STATION"=1 AND "TERMINAL_UPLOAD_TIME"<=TO_DATE(' 2017-12-02 23:59:59', 'syyyy-mm-dd hh24:mi:ss')) * 11 - filter(SUM("GR_CI")>=3) * 14 - filter("GRID_ID"=:B1 AND "IS_MACRO_STATION"=1 AND "TERMINAL_UPLOAD_TIME"<=TO_DATE(' 2017-12-02 23:59:59', 'syyyy-mm-dd hh24:mi:ss')) * 19 - filter("T1"."GRID_ID" IS NOT NULL AND "T1"."IS_MACRO_STATION"=1 AND "TERMINAL_UPLOAD_TIME"<=TO_DATE(' 2017-12-02 23:59:59', 'syyyy-mm-dd hh24:mi:ss')) * 22 - filter(CASE WHEN (SUM(CASE WHEN (TO_NUMBER("LTE_RSRP")>(-100) AND TO_NUMBER("LTE_SINR")<0) THEN 1 ELSE 0 END )>0 AND COUNT("GRID_ID")>0 AND SUM(CASE WHEN (TO_NUMBER("LTE_RSRP")>(-100) ANDTO_NUMBER("LTE_SINR")<0) THEN 1 ELSE 0 END )/COUNT("GRID_ID")>0.05) THEN 1 ELSE 0 END >=1) * 25 - filter("GRID_ID" IS NOT NULL AND "IS_MACRO_STATION"=1 AND "TERMINAL_UPLOAD_TIME"<=TO_DATE(' 2017-12-02 23:59:59', 'syyyy-mm-dd hh24:mi:ss')) * 26 - filter(COUNT("LTE_CI")/ (SELECT COUNT("GRID_ID") FROM "SJCL"."MEASURED_DATA" "A" WHERE "A"."GRID_ID"=:B1 AND "A"."IS_MACRO_STATION"=1 AND "TERMINAL_UPLOAD_TIME"<=TO_DATE(' 2017-12-0223:59:59', 'syyyy-mm-dd hh24:mi:ss'))>0.6) * 28 - filter( EXISTS (SELECT 0 FROM (SELECT COUNT(*) "SITENUM" FROM "SJCL"."TDL_CM_CELL" "TDL_CM_CELL" WHERE "REGION_NAME"=:B1 AND ("LONGITUDE">=:B2 AND "LONGITUDE"<TO_NUMBER(:B3) OR "LONGITUDE"<:B4AND "LONGITUDE">=TO_NUMBER(:B5)) AND ("LATITUDE">=:B6 AND "LONGITUDE"<TO_NUMBER(:B7) OR "LATITUDE"<:B8 AND "LATITUDE">=TO_NUMBER(:B9)) HAVING COUNT(*)>4) "from$_subquery$_021")) * 29 - access(TO_NUMBER( REGEXP_SUBSTR ("TL"."CI",'[^-]+',1,3))*256+TO_NUMBER( REGEXP_SUBSTR ("TL"."CI",'[^-]+',1,4))=TO_NUMBER("T"."LTE_CI") AND "TL"."ENBAJ08"=TO_NUMBER("T"."LTE_TAC")) * 31 - filter("T"."GRID_ID" IS NOT NULL AND "T"."GRID_LONGITUDE" IS NOT NULL AND "T"."GRID_LATITUDE" IS NOT NULL AND "LTE_CI" IS NOT NULL AND "LTE_TAC" IS NOT NULL AND "T"."IS_MACRO_STATION"=1 AND"TERMINAL_UPLOAD_TIME"<=TO_DATE(' 2017-12-02 23:59:59', 'syyyy-mm-dd hh24:mi:ss')) * 34 - filter(COUNT(*)>4) * 36 - filter("REGION_NAME"=:B1 AND ("LONGITUDE">=:B2 AND "LONGITUDE"<TO_NUMBER(:B3) OR "LONGITUDE"<:B4 AND "LONGITUDE">=TO_NUMBER(:B5)) AND ("LATITUDE">=:B6 AND "LONGITUDE"<TO_NUMBER(:B7) OR"LATITUDE"<:B8 AND "LATITUDE">=TO_NUMBER(:B9))) * 39 - filter("A"."GRID_ID"=:B1 AND "A"."IS_MACRO_STATION"=1 AND "TERMINAL_UPLOAD_TIME"<=TO_DATE(' 2017-12-02 23:59:59', 'syyyy-mm-dd hh24:mi:ss'))卡住,結果無法出來。問題在于:
1.多個不當掃描measured_data
2.不當查詢tdl_cm_cell,簡單而然即nest loop+full scan
3.不當使用子查詢
這肯定是非專業人士寫的。
?
改造思路
1.減少表掃描次數,盡量一次,可以利用with和group by達到
2.消除子查詢,改為join之類
3.對必要的表創建索引
?
修改之后
with x1 as(select count(grid_id) as grid_count, grid_idfrom SJCL.measured_datawhere IS_MACRO_STATION = 1and terminal_upload_time >=to_date('2017-12-03 00:00:00', 'yyyy/mm/dd hh24:mi:ss')and terminal_upload_time <=to_date('2017-12-03 23:59:59', 'yyyy/mm/dd hh24:mi:ss')group by grid_id), s1 as(select city_name,county_name,grid_id,sum(rsrp_value_100) rsrpSum_100,sum(rsrp_value_105) rsrpSum_105,count(grid_id) countsfrom ( --3select casewhen LTE_RSRP > -100 and LTE_SINR < 0 then1else0end rsrp_value_100,casewhen LTE_RSRP > -105 then1else0end rsrp_value_105,city_name,county_name,grid_idfrom SJCL.measured_datawhere IS_MACRO_STATION = 1and grid_id is not nulland terminal_upload_time >=to_date('2017-12-03 00:00:00', 'yyyy/mm/dd hh24:mi:ss')and terminal_upload_time <=to_date('2017-12-03 23:59:59', 'yyyy/mm/dd hh24:mi:ss')) t1group by t1.city_name, t1.county_name, t1.grid_id), vw_ttl as(select t.city_name,t.county_name,t.grid_id,t. LTE_CI,t. LTE_TAC,t.grid_longitude grid_longitude,t.grid_latitude grid_latitude,count(casewhen t.network_type = 'LTE' thent.lte_ciwhen t.network_type = 'GSM' thent.gsm_cidwhen t.network_type = 'TD' thent.td_cidelsenullend) ci_count,x1.grid_count,casewhen x1.grid_count = 0 then0elsecount(LTE_CI) / x1.grid_countend as ci_ratio,grouping_id(t.LTE_TAC) as gidfrom SJCL.measured_data tjoin x1on x1.grid_id = t.grid_idwhere t.grid_id is not nulland t.is_macro_station = 1--and t.city_name='寧德' --and t.county_name='霞浦縣'and terminal_upload_time >=to_date('2017-12-03 00:00:00', 'yyyy/mm/dd hh24:mi:ss')and terminal_upload_time <=to_date('2017-12-03 23:59:59', 'yyyy/mm/dd hh24:mi:ss')group by grouping sets((t.city_name, t.county_name, t.grid_id, t.LTE_CI, x1.grid_count, t.LTE_TAC, t.grid_longitude, t.grid_latitude),(t.city_name, t.county_name, t.grid_id, t.LTE_CI, x1.grid_count))) select *from (select row_.*, rownum rownum_from (select '弱覆蓋' as questionType,city_name as cityName,county_name as countyName,grid_id as gridId,'LTE' as netWorkTypefrom (select city_name,county_name,grid_id,casewhen rsrpSum > 0 and counts > 0 andrsrpSum / counts < 0.95 then1else0end rfgSumfrom (select city_name,county_name,grid_id,rsrpsum_105 as rsrpSum,countsfrom s1))where rfgSum >= 1group by city_name, county_name, grid_idunion all --e1select '無主控覆蓋' as questionType,city_name as cityName,county_name countyName,grid_id gridId,'LTE' as netWorkTypefrom (select casewhen ci_count / grid_count > 0.3 then1else0end gr_ci,city_name,county_name,grid_id,LTE_CIfrom vw_ttlwhere gid = 1)group by city_name, county_name, grid_idhaving sum(gr_ci) >= 3union all --e2select '質差' as questionType,city_name as cityName,county_name as countyName,grid_id as gridId,'LTE' as netWorkTypefrom (select city_name,county_name,grid_id,casewhen rsrpSum > 0 and counts > 0 andrsrpSum / counts > 0.05 then1else0end rfgSumfrom (select city_name,county_name,grid_id,rsrpsum_100 as rsrpSum,countsfrom s1))where rfgSum >= 1group by city_name, county_name, grid_idunion all --e3 select '越區覆蓋' as questionType,city_name as cityName,county_name as countyName,grid_id as gridId,'LTE' as netWorkTypefrom (select tc.*, tl.latitude, tl.longitudefrom (select city_name,county_name,grid_id,LTE_CI,LTE_TAC,grid_longitude,grid_latitude,ci_ratiofrom vw_ttlwhere gid = 0and ci_ratio > 0.6) tc,SJCL.tdl_cm_cell tlwhere tc.lte_ci = to_char(tl.eci)and tl.ENBAJ08 = tc.lte_tac) ttwhere (select /*+index(s IDX_TDL_CM_CELL_CITYNAME) */count(1) as siteNumfrom SJCL.tdl_cm_cell swhere region_name = tt.city_nameand ((longitude >= tt.longitude andlongitude < tt.grid_longitude) or(longitude < tt.longitude andlongitude >= tt.grid_longitude))and ((latitude >= tt.latitude andlongitude < tt.grid_latitude) or(latitude < tt.latitude andlatitude >= tt.grid_latitude))) > 4--e4 ) row_where rownum <= 100)where rownum_ >= 1計劃如下:
Plan Hash Value : 3577282419 ------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost | Time | ------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 100 | 41200 | 5905 | 00:00:01 | | 1 | TEMP TABLE TRANSFORMATION | | | | | | | 2 | LOAD AS SELECT | SYS_TEMP_0FDA2B063_13545153 | | | | | | 3 | HASH GROUP BY | | 18603 | 576693 | 554 | 00:00:01 | | 4 | PARTITION RANGE SINGLE | | 18603 | 576693 | 553 | 00:00:01 | | * 5 | TABLE ACCESS FULL | MEASURED_DATA | 18603 | 576693 | 553 | 00:00:01 | | 6 | LOAD AS SELECT | SYS_TEMP_0FDA2B064_13545153 | | | | | | 7 | SORT GROUP BY ROLLUP | | 38788 | 2831524 | 1782 | 00:00:01 | | * 8 | HASH JOIN | | 38788 | 2831524 | 1110 | 00:00:01 | | 9 | VIEW | | 8799 | 158382 | 557 | 00:00:01 | | 10 | HASH GROUP BY | | 8799 | 140784 | 557 | 00:00:01 | | 11 | PARTITION RANGE SINGLE | | 71006 | 1136096 | 553 | 00:00:01 | | * 12 | TABLE ACCESS FULL | MEASURED_DATA | 71006 | 1136096 | 553 | 00:00:01 | | 13 | PARTITION RANGE SINGLE | | 18603 | 1023165 | 553 | 00:00:01 | | * 14 | TABLE ACCESS FULL | MEASURED_DATA | 18603 | 1023165 | 553 | 00:00:01 | | * 15 | VIEW | | 100 | 41200 | 3568 | 00:00:01 | | * 16 | COUNT STOPKEY | | | | | | | 17 | VIEW | | 39189 | 15636411 | 3568 | 00:00:01 | | 18 | UNION-ALL | | | | | | | 19 | HASH GROUP BY | | 18603 | 725517 | 25 | 00:00:01 | | * 20 | VIEW | | 18603 | 725517 | 23 | 00:00:01 | | 21 | TABLE ACCESS FULL | SYS_TEMP_0FDA2B063_13545153 | 18603 | 576693 | 23 | 00:00:01 | | * 22 | FILTER | | | | | | | 23 | HASH GROUP BY | | 1940 | 100880 | 110 | 00:00:01 | | * 24 | VIEW | | 38788 | 2016976 | 107 | 00:00:01 | | 25 | TABLE ACCESS FULL | SYS_TEMP_0FDA2B064_13545153 | 38788 | 2831524 | 107 | 00:00:01 | | 26 | HASH GROUP BY | | 18603 | 725517 | 25 | 00:00:01 | | * 27 | VIEW | | 18603 | 725517 | 23 | 00:00:01 | | 28 | TABLE ACCESS FULL | SYS_TEMP_0FDA2B063_13545153 | 18603 | 576693 | 23 | 00:00:01 | | * 29 | FILTER | | | | | | | * 30 | HASH JOIN | | 43 | 41022 | 3279 | 00:00:01 | | 31 | TABLE ACCESS FULL | TDL_CM_CELL | 216734 | 5418350 | 1063 | 00:00:01 | | * 32 | VIEW | | 38788 | 36034052 | 107 | 00:00:01 | | 33 | TABLE ACCESS FULL | SYS_TEMP_0FDA2B064_13545153 | 38788 | 2831524 | 107 | 00:00:01 | | 34 | SORT AGGREGATE | | 1 | 18 | | | | 35 | CONCATENATION | | | | | | | * 36 | INDEX RANGE SCAN | IDX_TDL_CM_CELL_CITYNAME | 1 | 18 | 3 | 00:00:01 | | * 37 | INDEX RANGE SCAN | IDX_TDL_CM_CELL_CITYNAME | 1 | 18 | 3 | 00:00:01 | -------------------------------------------------------------------------------------------------------------Predicate Information (identified by operation id): ------------------------------------------ * 5 - filter("GRID_ID" IS NOT NULL AND "IS_MACRO_STATION"=1 AND "TERMINAL_UPLOAD_TIME"<=TO_DATE(' 2017-12-03 23:59:59', 'syyyy-mm-dd hh24:mi:ss')) * 8 - access("X1"."GRID_ID"="T"."GRID_ID") * 12 - filter("IS_MACRO_STATION"=1 AND "TERMINAL_UPLOAD_TIME"<=TO_DATE(' 2017-12-03 23:59:59', 'syyyy-mm-dd hh24:mi:ss')) * 14 - filter("T"."GRID_ID" IS NOT NULL AND "T"."IS_MACRO_STATION"=1 AND "T"."TERMINAL_UPLOAD_TIME"<=TO_DATE(' 2017-12-03 23:59:59', 'syyyy-mm-dd hh24:mi:ss')) * 15 - filter("ROWNUM_">=1) * 16 - filter(ROWNUM<=100) * 20 - filter(CASE WHEN ("RSRPSUM_105">0 AND "COUNTS">0 AND "RSRPSUM_105"/"COUNTS"<0.95) THEN 1 ELSE 0 END >=1) * 22 - filter(SUM(CASE WHEN "CI_COUNT"/"GRID_COUNT">0.3 THEN 1 ELSE 0 END )>=3) * 24 - filter("GID"=1) * 27 - filter(CASE WHEN ("RSRPSUM_100">0 AND "COUNTS">0 AND "RSRPSUM_100"/"COUNTS">0.05) THEN 1 ELSE 0 END >=1) * 29 - filter( (SELECT /*+ INDEX ("S" "IDX_TDL_CM_CELL_CITYNAME") */ COUNT(*) FROM "SJCL"."TDL_CM_CELL" "S"<not feasible>) * 30 - access("LTE_CI"=TO_CHAR("TL"."ECI") AND "TL"."ENBAJ08"=TO_NUMBER("LTE_TAC")) * 32 - filter("GID"=0 AND "CI_RATIO">0.6) * 36 - access("REGION_NAME"=:B1 AND "LONGITUDE">=TO_NUMBER(:B2) AND "LONGITUDE"<:B3) * 36 - filter("LATITUDE">=:B1 AND "LONGITUDE"<TO_NUMBER(:B2) OR "LATITUDE"<:B3 AND "LATITUDE">=TO_NUMBER(:B4)) * 37 - access("REGION_NAME"=:B1 AND "LONGITUDE">=:B2 AND "LONGITUDE"<TO_NUMBER(:B3)) * 37 - filter(("LATITUDE">=:B1 AND "LONGITUDE"<TO_NUMBER(:B2) OR "LATITUDE"<:B3 AND "LATITUDE">=TO_NUMBER(:B4)) AND (LNNVL("LONGITUDE"<:B5) OR LNNVL("LONGITUDE">=TO_NUMBER(:B6))))結果:1秒內出現結果
效率提升幾千倍!
所以,把專業的事情給專業的人做很重要。做前端開發的并不擅長數據庫設計和SQL編寫。
?
轉載于:https://www.cnblogs.com/lzfhope/p/8081335.html
總結
以上是生活随笔為你收集整理的oracle-sql优化-通过分组和缓存减少不必要的读的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 回到网易后开源APM技术选型与实战
- 下一篇: 158.5. manifests