云数据库 GAUSSDB-案例:改写SQL消除in-clause:现象描述
现象描述
in-clause/any-clause是常见的SQL语句约束条件,有时in或any后面的clause都是常量,类似于:
1 2 3 4 |
select count(1) from calc_empfyc_c1_result_tmp_t1 where ls_pid_cusr1 in (‘20120405’, ‘20130405’); |
或者
1 2 3 4 |
select count(1) from calc_empfyc_c1_result_tmp_t1 where ls_pid_cusr1 in any(‘20120405’, ‘20130405’); |
但是也有一些如下的特殊用法:
1 2 3 4 5 |
SELECT ls_pid_cusr1,COALESCE(max(round((current_date-bthdate)/365)),0) FROM calc_empfyc_c1_result_tmp_t1 t1,p10_md_tmp_t2 t2 WHERE t1.ls_pid_cusr1 = any(values(id),(id15)) GROUP BY ls_pid_cusr1; |
其中,id、id15为p10_md_tmp_t2中的两列,“t1.ls_pid_cusr1 = any(values(id),(id15))”等价于“t1.ls_pid_cusr1 = id or t1.ls_pid_cusr1 = id15”。
因此join-condition实质上是一个不等式,这种不等值的join操作必须走nestloop,对应执行计划如下:
- GaussDB性能_Gaussdb数据库性能_高斯数据库性能-华为云
- GaussDB案例指南_高斯数据库函数_高斯数据库案例指南_华为云
- GaussDB集群搭建_SQL数据库是谁发明的_高斯数据库集群搭建_华为云
- GaussDB视频教程_gaussdb查看表结构语句_高斯数据库视频教程_华为云
- GaussDB性能怎么调_华为gaussdb_gaussdb性能_gaussdb学习
- GaussDB数据库考试_GaussDB认证_高斯数据库考试_华为云
- GaussDB学习_gaussdb教程_高斯数据库学习_华为云
- GaussDB用法_GaussDB数据库使用方法_高斯数据库如何使用_华为云
- GaussDB数据库概念_openGauss_华为高斯数据库概念
- GaussDB培训_GaussDB教程_高斯数据库培训-华为云