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

相关推荐
老邓计算机毕设2 小时前
SSM养老院管理系统的设计于实现78fyn(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·计算机毕业设计·养老院管理系统·ssm 框架
a程序小傲2 小时前
京东Java面试被问:基于Gossip协议的最终一致性实现和收敛时间
java·开发语言·前端·数据库·python·面试·状态模式
重生之绝世牛码2 小时前
Linux软件安装 —— PostgreSQL集群安装(主从复制集群)
大数据·linux·运维·数据库·postgresql·软件安装·postgresql主从集群
程序员小白条2 小时前
面试 Java 基础八股文十问十答第二十二期
java·开发语言·数据库·面试·职场和发展·毕设
万象.2 小时前
redis客户端安装与实现C++版本
数据库·c++·redis
Yiyaoshujuku2 小时前
疾病的发病率、发病人数、患病率、患病人数、死亡率、死亡人数查询网站及数据库
数据库·人工智能·算法
不想写bug呀2 小时前
Redis总结
数据库·redis·缓存
Neolnfra2 小时前
数据库提权实战指南
数据库·数据库安全
DarkAthena2 小时前
【GaussDB】合入原生PG的PR来修复CVE-2025-1094漏洞后产生的严重隐患
数据库·漏洞·gaussdb