Delete时小心子查询(F_BASE 语句执行时间过长) SQL优化

在F_BASE学习库中,清理含有500万数据的临时表时,尝试删除5万数据的SQL语句执行超过一天未完成。问题源于子查询的效率低下。通过分析,我们可以找到优化此问题的方法。
摘要由CSDN通过智能技术生成

问题说明:MySQL带子查询的delete或update会存在全表扫描,
       MySQL5.5的子查询普遍存在的问题
       MySQL5.7虽然已进行了优化,但是带子查询的Update、Delete仍存在问题

1.现象

        F_BASE学习库在清理临时表时,模拟从500万数据中删除5万数据,执行时间超过一天还没有结束,导致功能无法投产。

问题语句:

delete
from base_center.ref_payee_bank_info_temp
where concat(account_no,account_name,bank_no) in
    (select concat(arccno,raccname,obnkcode)
    from fbase_center.ref_sffhbpma_bat
    where betradtype = 2
          and bensndrevf = '6'
          and substr(bemsgtype,1,8) = 'BEPS.121'
          and busscode = 'A105'
          and bestatus in (36,37,39,40,41)
     )

原因分析

    使用explain查看执行计划时,发现虽然子查询存在主键,但是在执行计划为全表扫描,导致耗时剧增。
    该问题在MySQL5.5时普遍存在问题,虽然MySQL5.7进行了一定优化,但是效果不是很明显</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值