GBase 8a
性能调优
文章
SQL优化—— 关联delete因重复值高导致笛卡尔积问题
发表于2024-12-31 10:56:1343次浏览2个评论
客户现场有业务通过关联delete操作清理当期数据,语法如下:
主表A与临时表tmp关联删除步骤中,如临时表tmp内数据在关联列中存在重复,则容易出现主表A和临时表tmp关联删除步骤中的笛卡尔积问题,关联delete主表数据的逻辑类似如下:
DELETE A
FROM A JOIN tmp
WHERE A.WORKDATE = tmp.WORKDATE;
如临时表tmp内和主表中A的数据在WORKDATE列出现较高重复值则将产生笛卡尔积问题,主表和临时表join的中间结果集过大,join算子中间结果落盘造成IO资源大量被占用。
可采用如下方案优化,防止临时表中的重复数据与主表关联时产生笛卡尔积,具体方案如下:
方案一:先去重后再关联
DELETE A
FROM A JOIN (SELECT DISTINCT WORKDATE FROM tmp) B
WHERE A.WORKDATE = B.WORKDATE;
方案二:使用in子查询
DELETE A
WHERE A.WORKDATE in (SELECT distinct WORKDATE FROM tmp)
附:实验室环境重复数据关联delete测试结果:
测试环境:
服务器:戴尔PowerEdge R720xd
内存:128G
CPU:2*8core Intel(R) Xeon(R) CPU E5-2650
测试SQL:

资源消耗情况对比:



测试结论:随着重复数据的增多,关联delete资源消耗、执行时间会逐步增高。
评论
登录后才可以发表评论
GBase用户51883发表于 2个月前
闪闪发光
曾云林发表于 2个月前
加油
热门帖子
- 12025-12-01浏览数:182763
- 22023-05-09浏览数:25057
- 42023-09-25浏览数:18525
- 52020-05-11浏览数:17528