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个月前
加油