云数据库 GAUSSDB-案例:改写SQL消除in-clause:优化说明
优化说明
测试发现由于两表结果集过大,导致nestloop耗时过长,超过一小时未返回结果,因此性能优化的关键是消除nestloop,让join走更高效的hashjoin。从语义等价的角度消除any-clause,SQL改写如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
select ls_pid_cusr1,COALESCE(max(round(ym/365)),0) from ( ( SELECT ls_pid_cusr1,(current_date-bthdate) as ym FROM calc_empfyc_c1_result_tmp_t1 t1,p10_md_tmp_t2 t2 WHERE t1.ls_pid_cusr1 = t2.id and t1.ls_pid_cusr1 != t2.id15 ) union all ( SELECT ls_pid_cusr1,(current_date-bthdate) as ym FROM calc_empfyc_c1_result_tmp_t1 t1,p10_md_tmp_t2 t2 WHERE t1.ls_pid_cusr1 = id15 ) ) GROUP BY ls_pid_cusr1; |
优化后的SQL查询由两个等值join的子查询构成,而每个子查询都可以走更适合此场景的hashjoin。优化后的执行计划如下
优化后,从超过1个小时未返回结果优化到7s返回结果。
- GaussDB性能_Gaussdb数据库性能_高斯数据库性能-华为云
- GaussDB案例指南_高斯数据库函数_高斯数据库案例指南_华为云
- GaussDB性能怎么调_华为gaussdb_gaussdb性能_gaussdb学习
- GaussDB考试_GaussDB数据库考试_高斯数据库考试_华为云
- GaussDB视频教程_gaussdb查看表结构语句_高斯数据库视频教程_华为云
- GaussDB学习_gaussdb教程_高斯数据库学习_华为云
- GaussDB数据库考试_GaussDB认证_高斯数据库考试_华为云
- GaussDB内核_GaussDB数据库内核_高斯数据库内核_华为云
- GaussDB用法_GaussDB数据库使用方法_高斯数据库如何使用_华为云
- GaussDB配额_GaussDB数据库配额_高斯数据库配额_华为云