update sql 带变量卡死

【 TiDB 使用环境】生产环境
【 TiDB 版本】v7.5.1
【复现路径】set @tidb_seq_id=1;

select @tidb_seq_id;

update tb_uhome_acct_item a,sdc_dws.tb_uhome_fee_item_type b, map_organ_list c
set a.group_id=b.group_id
WHERE b.fee_item_type_id=a.fee_item_type_id
and a.community_id =c.organ_id
and c.seq_id=@tidb_seq_id;
【遇到的问题:问题现象及影响】update 带有变量@tidb_seq_id的时候,卡死。如果不用变量,更新秒成功。

发下analyze 的结果
使用join 试试呢?
表数据大吗?

不大,3千多万。跑2分多钟。如果sql直接改成具体值就很快更新成功。join也不行。

发下执行计划

要根据执行计划来进行分析

直接把整个select语句关联试试呢

执行explain analyze看看,估计是有类型转换导致不能使用主键或者索引吧

执行计划贴一下吧,估计是走不上索引导致的

1 个赞

估计没走索引,这确实是个问题

有执行计划吗?explain一下

变量解析成了字符串了吧

使用预处理语句试一下
https://docs.pingcap.com/zh/tidb/stable/dev-guide-prepared-statement

seq_id是什么数据类型?

带变量 没走索引

执行计划丢出来瞅瞅

看看是不是业务高峰期,造成了锁啊