数据仓库服务 GAUSSDB(DWS)-案例:改写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(DWS)_SQL on Anywhere
- GaussDB(DWS)常用SQL_常用SQL命令_SQL语法
- DWS安全_数据仓库服务安全_DWS数据安全管理_DWS安全保障_DWS安全策略
- DWS产品介绍_DWS产品优势_DWS功能_DWS使用场景_DWS是什么
- 调用GaussDB(DWS) API接口_数据仓库服务调用API_如何调用API_在DWS中调用API
- GAUSS(DWS)工具_gsql工具_DataStudio工具_DSC工具
- 数据库监控DMS_数据库智能运维_了解Auto Pilot_DMS_DWS节点监控
- GaussDB性能_Gaussdb数据库性能_高斯数据库性能-华为云
- 华为云资料 2021年 7月刊
- GaussDB案例_gaussdb java_高斯数据库案例_华为云