暂无图片
GBase8a慢SQL优化
我来答
分享
暂无图片 匿名用户
GBase8a慢SQL优化

某移动现场一条insert select 语句执行时间超过2小时,需要分析,SQL语句如下:

insert into tableXXX

select distinct cast(ct.USER_ID as char) as USER_ID

  from database.dwa_grp_mem_info_d_20211031 dgmid

  join database.dwa_grp_mem_use_info_m_202110 ct

  on cast(ct.GROUP_ID as char) = cast(dgmid.GROUP_ID as char);

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
刘先生

与现场沟通怀疑是因为左侧关联字段ct.GROUP_ID 加了函数造成索引失效,修改之后执行时间仍然在半小时以上,打开trace日志查看gnode层日志可见join返回行数远远大于两张源表的数据量,因此怀疑是笛卡尔积问题。


验证发现两表有大量的重复值,如下图所示

Exists语法适用于关联去重的场景。将关联字段改写为exists 写法后,SQL可以在1分钟内跑出结果

insert into tableXXX 

select distinct ct.USER_ID   from datumdb.dwa_grp_mem_info_d_20211031 dgmid

where exists (select 1 from datumdb.dwa_grp_mem_use_info_m_202110 ct  where ct.GROUP_ID=dgmid.GROUP_ID) 

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏