第一则 是SQL 语句改写。 使用窗口函数改写SQL语句,效率提示是十分明显的。大佬也许一看就会,我还是搜索一下才弄明白的。让我对窗口函数有了更加深刻的理解。
aaaa
sql
CREATE TABLE sales_amount_by_days (day_num number,prod1 number,prod2 number);
DECLARE
BEGIN
FOR i IN 1..1000000 loop
INSERT INTO sales_amount_by_days VALUES(i,trunc(1000*random()),trunc(1000*random()));
END loop;
END;
/
COMMIT;
--12s 原来的SQL 语句。
select day_num,prod2,(select avg(prod2) from sales_amount_by_days b where b.day_num<=a.day_num and b.day_num>a.day_num -5) from sales_amount_by_days a ;
--0.722s 下面是正确答案,效率提升是明显
select day_num,prod2,avg(prod2) over(order by day_num asc rows between 4 preceding and current row ) from sales_amount_by_days;
第二案例
sql
-- 这个脚本大约执行了十分钟
explain performance
select 1
from ads_tyj.APP_PRIP_LCPOLTRANSACTION b --几千条
join ods_csmd.ll_claim c on b.claimno=c.clmno
join ods_csmd.ll_acc_case_rela e on e.clmno=c.clmno and e.clmindex=c.clmindex
join ods_csmd.ll_accept D on D.acceptno =c.acceptno
QUERY PLAN
id | operation | A-time | A-rows | E-rows | E-distinct | Peak Memory | E-memory | A-width | E-width | E-costs
----+----------------------------------------------------------------------------------+--------------------------+---------+---------+------------+----------------+----------+---------+---------+----------
1 | -> Streaming (type: GATHER) | 630484.158 | 8611 | 241 | | 56KB | | | 0 | 43477.71
2 | -> Nested Loop (3,16) | [427316.621, 630475.409] | 8611 | 241 | | [272KB, 272KB] | 1MB | | 0 | 43439.71
3 | -> Streaming(type: BROADCAST) | [381.300, 427.643] | 154998 | 4338 | | [561KB, 561KB] | 2MB | | 19 | 27185.80
4 | -> Hash Join (5,7) | [383.896, 441.606] | 8611 | 241 | | [16KB, 16KB] | 1MB | | 19 | 27147.48
5 | -> Row Adapter | [61.987, 81.798] | 3362847 | 3319578 | 184213 | [23KB, 23KB] | 1MB | | 27 | 3846.42
6 | -> CStore Scan on ods_csmd.ll_acc_case_rela e | [45.147, 62.284] | 3362847 | 3319584 | | [840KB, 885KB] | 1MB | | 27 | 3846.42
7 | -> Hash | [272.555, 316.988] | 150318 | 151470 | 8218 | [1MB, 1MB] | 16MB | [83,83] | 65 | 21791.54
8 | -> Streaming(type: BROADCAST) | [264.623, 309.629] | 150318 | 151470 | | [561KB, 561KB] | 2MB | | 65 | 21791.54
9 | -> Hash Join (10,13) | [270.260, 314.957] | 8351 | 8415 | | [16KB, 16KB] | 1MB | | 65 | 20411.72
10 | -> Streaming(type: REDISTRIBUTE) | [123.650, 155.328] | 3299234 | 3194542 | 177475 | [561KB, 561KB] | 2MB | | 46 | 17479.16
11 | -> Row Adapter | [64.640, 97.498] | 3299234 | 3194550 | | [31KB, 31KB] | 1MB | | 46 | 2837.47
12 | -> CStore Scan on ods_csmd.ll_claim c | [45.841, 79.629] | 3299234 | 3194542 | | [1MB, 1MB] | 1MB | | 46 | 2837.47
13 | -> Hash | [19.846, 64.263] | 8351 | 308610 | 459 | [296KB, 296KB] | 16MB | [35,35] | 19 | 2154.91
14 | -> Streaming(type: PART REDISTRIBUTE PART ROUNDROBIN) | [16.567, 61.015] | 308617 | 308617 | | [513KB, 561KB] | 2MB | | 19 | 2154.91
15 | -> Seq Scan on ads_tyj.app_prip_lcpoltransaction b | [10.588, 15.610] | 308617 | 308617 | | [32KB, 32KB] | 1MB | | 19 | 740.45
16 | -> Row Adapter | [426170.554, 629366.221] | 8611 | 18 | | [24KB, 24KB] | 1MB | | 19 | 67.43
17 | -> CStore Index Only Scan using ll_accept_pkey on ods_csmd.ll_accept d | [426140.623, 629334.703] | 8611 | 1 | | [1MB, 1MB] | 1MB | | 19 | 67.43
SQL Diagnostic Information
------------------------------------------------------------------------------------------------------------
Execute diagnostic information
" PlanNode[17] Indexscan is not properly used:CStore Index Only Scan"", output:8611, filtered:0, rate:1.00000"""
Predicate Information (identified by plan id)
----------------------------------------------------------------------------------------
4 --Hash Join (5,7)
Hash Cond: (((e.clmno)::text = (b.claimno)::text) AND (e.clmindex = c.clmindex))
9 --Hash Join (10,13)
Hash Cond: ((c.clmno)::text = (b.claimno)::text)
Skew Join Optimized by Statistic
14 --Streaming(type: PART REDISTRIBUTE PART ROUNDROBIN)
Skew Filter(type: ROUNDROBIN): (b.claimno IS NULL)
17 --CStore Index Only Scan using ll_accept_pkey on ods_csmd.ll_accept d
Index Cond: ((d.acceptno)::text = (c.acceptno)::text)
Memory Information (identified by plan id)
--------------------------------------------------------------------------------------------------------------------------------------------------------------
Coordinator Query Peak Memory:
Query Peak Memory: 8MB
DataNode Query Peak Memory
dn_6001_6002 Query Peak Memory: 0MB
dn_6003_6004 Query Peak Memory: 0MB
dn_6005_6006 Query Peak Memory: 0MB
dn_6007_6008 Query Peak Memory: 0MB
dn_6009_6010 Query Peak Memory: 0MB
dn_6011_6012 Query Peak Memory: 0MB
dn_6013_6014 Query Peak Memory: 0MB
dn_6015_6016 Query Peak Memory: 0MB
dn_6017_6018 Query Peak Memory: 0MB
dn_6019_6020 Query Peak Memory: 0MB
dn_6021_6022 Query Peak Memory: 0MB
dn_6023_6024 Query Peak Memory: 0MB
dn_6025_6026 Query Peak Memory: 0MB
dn_6027_6028 Query Peak Memory: 0MB
dn_6029_6030 Query Peak Memory: 0MB
dn_6031_6032 Query Peak Memory: 0MB
dn_6033_6034 Query Peak Memory: 0MB
dn_6035_6036 Query Peak Memory: 0MB
1 --Streaming (type: GATHER)
Peak Memory: 56KB, Estimate Memory: 2048MB
2 --Nested Loop (3,16)
dn_6001_6002 Peak Memory: 272KB, Estimate Memory: 1024KB
dn_6003_6004 Peak Memory: 272KB, Estimate Memory: 1024KB
dn_6005_6006 Peak Memory: 272KB, Estimate Memory: 1024KB
dn_6007_6008 Peak Memory: 272KB, Estimate Memory: 1024KB
dn_6009_6010 Peak Memory: 272KB, Estimate Memory: 1024KB
dn_6011_6012 Peak Memory: 272KB, Estimate Memory: 1024KB
dn_6013_6014 Peak Memory: 272KB, Estimate Memory: 1024KB
dn_6015_6016 Peak Memory: 272KB, Estimate Memory: 1024KB
dn_6017_6018 Peak Memory: 272KB, Estimate Memory: 1024KB
dn_6019_6020 Peak Memory: 272KB, Estimate Memory: 1024KB
dn_6021_6022 Peak Memory: 272KB, Estimate Memory: 1024KB
dn_6023_6024 Peak Memory: 272KB, Estimate Memory: 1024KB
dn_6025_6026 Peak Memory: 272KB, Estimate Memory: 1024KB
dn_6027_6028 Peak Memory: 272KB, Estimate Memory: 1024KB
dn_6029_6030 Peak Memory: 272KB, Estimate Memory: 1024KB
dn_6031_6032 Peak Memory: 272KB, Estimate Memory: 1024KB
dn_6033_6034 Peak Memory: 272KB, Estimate Memory: 1024KB
dn_6035_6036 Peak Memory: 272KB, Estimate Memory: 1024KB
dn_6001_6002 Stream Send time: 0.000; Data Serialize time: 1.596
dn_6003_6004 Stream Send time: 0.000; Data Serialize time: 1.399
dn_6005_6006 Stream Send time: 0.000; Data Serialize time: 1.724
dn_6007_6008 Stream Send time: 0.000; Data Serialize time: 1.479
dn_6009_6010 Stream Send time: 0.000; Data Serialize time: 1.708
dn_6011_6012 Stream Send time: 0.000; Data Serialize time: 1.322
dn_6013_6014 Stream Send time: 0.000; Data Serialize time: 1.507
dn_6015_6016 Stream Send time: 0.000; Data Serialize time: 1.503
dn_6017_6018 Stream Send time: 0.000; Data Serialize time: 1.388
dn_6019_6020 Stream Send time: 0.000; Data Serialize time: 1.381
dn_6021_6022 Stream Send time: 0.000; Data Serialize time: 1.502
dn_6023_6024 Stream Send time: 0.000; Data Serialize time: 1.709
dn_6025_6026 Stream Send time: 0.000; Data Serialize time: 1.634
dn_6027_6028 Stream Send time: 0.000; Data Serialize time: 1.372
dn_6029_6030 Stream Send time: 0.000; Data Serialize time: 1.555
dn_6031_6032 Stream Send time: 0.000; Data Serialize time: 1.636
dn_6033_6034 Stream Send time: 0.000; Data Serialize time: 1.526
dn_6035_6036 Stream Send time: 0.000; Data Serialize time: 1.604
3 --Streaming(type: BROADCAST)
dn_6001_6002 Peak Memory: 561KB, Estimate Memory: 2MB
dn_6003_6004 Peak Memory: 561KB, Estimate Memory: 2MB
dn_6005_6006 Peak Memory: 561KB, Estimate Memory: 2MB
dn_6007_6008 Peak Memory: 561KB, Estimate Memory: 2MB
dn_6009_6010 Peak Memory: 561KB, Estimate Memory: 2MB
dn_6011_6012 Peak Memory: 561KB, Estimate Memory: 2MB
dn_6013_6014 Peak Memory: 561KB, Estimate Memory: 2MB
dn_6015_6016 Peak Memory: 561KB, Estimate Memory: 2MB
dn_6017_6018 Peak Memory: 561KB, Estimate Memory: 2MB
dn_6019_6020 Peak Memory: 561KB, Estimate Memory: 2MB
dn_6021_6022 Peak Memory: 561KB, Estimate Memory: 2MB
dn_6023_6024 Peak Memory: 561KB, Estimate Memory: 2MB
dn_6025_6026 Peak Memory: 561KB, Estimate Memory: 2MB
dn_6027_6028 Peak Memory: 561KB, Estimate Memory: 2MB
dn_6029_6030 Peak Memory: 561KB, Estimate Memory: 2MB
dn_6031_6032 Peak Memory: 561KB, Estimate Memory: 2MB
dn_6033_6034 Peak Memory: 561KB, Estimate Memory: 2MB
dn_6035_6036 Peak Memory: 561KB, Estimate Memory: 2MB
dn_6001_6002 Stream Network: 210kB, Network Poll Time: 402.363; Data Deserialize Time: 3.959
dn_6003_6004 Stream Network: 210kB, Network Poll Time: 402.518; Data Deserialize Time: 4.966
dn_6005_6006 Stream Network: 210kB, Network Poll Time: 402.592; Data Deserialize Time: 4.547
dn_6007_6008 Stream Network: 210kB, Network Poll Time: 402.498; Data Deserialize Time: 4.742
dn_6009_6010 Stream Network: 210kB, Network Poll Time: 402.590; Data Deserialize Time: 4.373
dn_6011_6012 Stream Network: 210kB, Network Poll Time: 358.143; Data Deserialize Time: 5.125
dn_6013_6014 Stream Network: 210kB, Network Poll Time: 402.434; Data Deserialize Time: 5.587
dn_6015_6016 Stream Network: 210kB, Network Poll Time: 402.439; Data Deserialize Time: 4.611
dn_6017_6018 Stream Network: 210kB, Network Poll Time: 402.649; Data Deserialize Time: 5.158
dn_6019_6020 Stream Network: 210kB, Network Poll Time: 402.520; Data Deserialize Time: 4.347
dn_6021_6022 Stream Network: 210kB, Network Poll Time: 402.693; Data Deserialize Time: 4.860
dn_6023_6024 Stream Network: 210kB, Network Poll Time: 402.558; Data Deserialize Time: 5.381
dn_6025_6026 Stream Network: 210kB, Network Poll Time: 402.565; Data Deserialize Time: 5.402
dn_6027_6028 Stream Network: 210kB, Network Poll Time: 402.590; Data Deserialize Time: 5.032
dn_6029_6030 Stream Network: 210kB, Network Poll Time: 402.667; Data Deserialize Time: 4.824
dn_6031_6032 Stream Network: 210kB, Network Poll Time: 402.645; Data Deserialize Time: 5.756
dn_6033_6034 Stream Network: 210kB, Network Poll Time: 402.608; Data Deserialize Time: 4.648
dn_6035_6036 Stream Network: 210kB, Network Poll Time: 402.344; Data Deserialize Time: 5.090
4 --Hash Join (5,7)
dn_6001_6002 Peak Memory: 16KB, Estimate Memory: 1024KB
dn_6003_6004 Peak Memory: 16KB, Estimate Memory: 1024KB
dn_6005_6006 Peak Memory: 16KB, Estimate Memory: 1024KB
dn_6007_6008 Peak Memory: 16KB, Estimate Memory: 1024KB
dn_6009_6010 Peak Memory: 16KB, Estimate Memory: 1024KB
dn_6011_6012 Peak Memory: 16KB, Estimate Memory: 1024KB
dn_6013_6014 Peak Memory: 16KB, Estimate Memory: 1024KB
dn_6015_6016 Peak Memory: 16KB, Estimate Memory: 1024KB
dn_6017_6018 Peak Memory: 16KB, Estimate Memory: 1024KB
dn_6019_6020 Peak Memory: 16KB, Estimate Memory: 1024KB
dn_6021_6022 Peak Memory: 16KB, Estimate Memory: 1024KB
dn_6023_6024 Peak Memory: 16KB, Estimate Memory: 1024KB
dn_6025_6026 Peak Memory: 16KB, Estimate Memory: 1024KB
dn_6027_6028 Peak Memory: 16KB, Estimate Memory: 1024KB
dn_6029_6030 Peak Memory: 16KB, Estimate Memory: 1024KB
dn_6031_6032 Peak Memory: 16KB, Estimate Memory: 1024KB
dn_6033_6034 Peak Memory: 16KB, Estimate Memory: 1024KB
dn_6035_6036 Peak Memory: 16KB, Estimate Memory: 1024KB
dn_6001_6002 Stream pool init time: 0.494; Stream Send time: 0.319, OS Kernel Send time: 0.301; Data Serialize time: 0.142
dn_6003_6004 Stream pool init time: 0.596; Stream Send time: 0.297, OS Kernel Send time: 0.285; Data Serialize time: 0.124
dn_6005_6006 Stream pool init time: 0.604; Stream Send time: 0.301, OS Kernel Send time: 0.286; Data Serialize time: 0.121
dn_6007_6008 Stream pool init time: 0.559; Stream Send time: 0.283, OS Kernel Send time: 0.270; Data Serialize time: 0.110
dn_6009_6010 Stream pool init time: 0.537; Stream Send time: 0.354, OS Kernel Send time: 0.324; Data Serialize time: 0.112
dn_6011_6012 Stream pool init time: 0.488; Stream Send time: 0.309, OS Kernel Send time: 0.296; Data Serialize time: 0.117
dn_6013_6014 Stream pool init time: 0.697; Stream Send time: 0.277, OS Kernel Send time: 0.260; Data Serialize time: 0.117
dn_6015_6016 Stream pool init time: 0.823; Stream Send time: 0.284, OS Kernel Send time: 0.269; Data Serialize time: 0.117
dn_6017_6018 Stream pool init time: 0.619; Stream Send time: 0.269, OS Kernel Send time: 0.253; Data Serialize time: 0.111
dn_6019_6020 Stream pool init time: 0.641; Stream Send time: 0.341, OS Kernel Send time: 0.326; Data Serialize time: 0.141
dn_6021_6022 Stream pool init time: 0.513; Stream Send time: 0.166, OS Kernel Send time: 0.153; Data Serialize time: 0.120
dn_6023_6024 Stream pool init time: 0.595; Stream Send time: 0.222, OS Kernel Send time: 0.204; Data Serialize time: 0.132
dn_6025_6026 Stream pool init time: 0.594; Stream Send time: 0.183, OS Kernel Send time: 0.167; Data Serialize time: 0.145
dn_6027_6028 Stream pool init time: 0.638; Stream Send time: 0.177, OS Kernel Send time: 0.161; Data Serialize time: 0.121
dn_6029_6030 Stream pool init time: 0.571; Stream Send time: 0.188, OS Kernel Send time: 0.174; Data Serialize time: 0.120
dn_6031_6032 Stream pool init time: 0.641; Stream Send time: 0.189, OS Kernel Send time: 0.174; Data Serialize time: 0.137
dn_6033_6034 Stream pool init time: 0.602; Stream Send time: 0.173, OS Kernel Send time: 0.158; Data Serialize time: 0.122
dn_6035_6036 Stream pool init time: 0.634; Stream Send time: 0.184, OS Kernel Send time: 0.170; Data Serialize time: 0.105
5 --Row Adapter
dn_6001_6002 Peak Memory: 23KB, Estimate Memory: 1024KB
dn_6003_6004 Peak Memory: 23KB, Estimate Memory: 1024KB
dn_6005_6006 Peak Memory: 23KB, Estimate Memory: 1024KB
dn_6007_6008 Peak Memory: 23KB, Estimate Memory: 1024KB
dn_6009_6010 Peak Memory: 23KB, Estimate Memory: 1024KB
dn_6011_6012 Peak Memory: 23KB, Estimate Memory: 1024KB
dn_6013_6014 Peak Memory: 23KB, Estimate Memory: 1024KB
dn_6015_6016 Peak Memory: 23KB, Estimate Memory: 1024KB
dn_6017_6018 Peak Memory: 23KB, Estimate Memory: 1024KB
dn_6019_6020 Peak Memory: 23KB, Estimate Memory: 1024KB
dn_6021_6022 Peak Memory: 23KB, Estimate Memory: 1024KB
dn_6023_6024 Peak Memory: 23KB, Estimate Memory: 1024KB
dn_6025_6026 Peak Memory: 23KB, Estimate Memory: 1024KB
dn_6027_6028 Peak Memory: 23KB, Estimate Memory: 1024KB
dn_6029_6030 Peak Memory: 23KB, Estimate Memory: 1024KB
dn_6031_6032 Peak Memory: 23KB, Estimate Memory: 1024KB
dn_6033_6034 Peak Memory: 23KB, Estimate Memory: 1024KB
dn_6035_6036 Peak Memory: 23KB, Estimate Memory: 1024KB
6 --CStore Scan on ods_csmd.ll_acc_case_rela e
dn_6001_6002 Peak Memory: 863KB, Estimate Memory: 1024KB
dn_6003_6004 Peak Memory: 863KB, Estimate Memory: 1024KB
dn_6005_6006 Peak Memory: 863KB, Estimate Memory: 1024KB
dn_6007_6008 Peak Memory: 863KB, Estimate Memory: 1024KB
dn_6009_6010 Peak Memory: 863KB, Estimate Memory: 1024KB
dn_6011_6012 Peak Memory: 863KB, Estimate Memory: 1024KB
dn_6013_6014 Peak Memory: 863KB, Estimate Memory: 1024KB
解决办
sql
select /*+ leading(((c b) d) e) use_hash(c b) use_hash(d) use_hash(e) */ 1
from ads_tyj.APP_PRIP_LCPOLTRANSACTION b --几千条
join ods_csmd.ll_claim c on b.claimno=c.clmno
join ods_csmd.ll_acc_case_rela e on e.clmno=c.clmno and e.clmindex=c.clmindex
join ods_csmd.ll_accept D on D.acceptno =c.acceptno
法