GaussDB-SQL优化案例

第一则 是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

相关推荐
小陈工1 小时前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
科技小花6 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸6 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain6 小时前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希6 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神6 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员6 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java7 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿7 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴7 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存