记一次Mysql多表update和exists与in的比较调优

环境:

Mysql8.0.24

表syrk_rkjbxx与weijianwei_syrk_jbdjxx表的索引皆是不规范的身份证号(syrk_gmsfhm)。



1.两表关联update,对比后发现第二种好用,比较快:

EXPLAIN UPDATE syrk_rkjbxx syrk_rkjbxx
LEFT JOIN weijianwei_syrk_jbdjxx 
ON syrk_rkjbxx.syrk_gmsfhm = weijianwei_syrk_jbdjxx.syrk_gmsfhm 
SET 
	syrk_rkjbxx.syrk_csrq = weijianwei_syrk_jbdjxx.syrk_csrq,
	syrk_rkjbxx.syrk_jkzk = weijianwei_syrk_jbdjxx.syrk_jkzk,
	syrk_rkjbxx.syrk_swsj = weijianwei_syrk_jbdjxx.syrk_swsj,
	syrk_rkjbxx.update_time = CURRENT_TIMESTAMP;



EXPLAIN UPDATE syrk_rkjbxx,weijianwei_syrk_jbdjxx
SET 
	syrk_rkjbxx.syrk_csrq = weijianwei_syrk_jbdjxx.syrk_csrq,
	syrk_rkjbxx.syrk_jkzk = weijianwei_syrk_jbdjxx.syrk_jkzk,
	syrk_rkjbxx.syrk_swsj = weijianwei_syrk_jbdjxx.syrk_swsj,
	syrk_rkjbxx.update_time = CURRENT_TIMESTAMP 
WHERE
	syrk_rkjbxx.syrk_gmsfhm = weijianwei_syrk_jbdjxx.syrk_gmsfhm;





2.某种特殊情况下exists和in,发现第二种好用,比较快:

EXPLAIN SELECT
	syrk_zjlx,
	syrk_zjhm,
	syrk_gmsfhm,
	syrk_xm,
	syrk_csrq,
	syrk_jkzk,
	syrk_swsj,
	CURRENT_TIMESTAMP AS update_time 
FROM
	weijianwei_syrk_jbdjxx 
WHERE
	NOT EXISTS (
		SELECT
			syrk_rkjbxx.syrk_gmsfhm 
		FROM
			syrk_rkjbxx 
		WHERE
		syrk_rkjbxx.syrk_gmsfhm = weijianwei_syrk_jbdjxx.syrk_gmsfhm 
		OR weijianwei_syrk_jbdjxx.is_delete != 1
	)



EXPLAIN SELECT
	syrk_zjlx,
	syrk_zjhm,
	syrk_gmsfhm,
	syrk_xm,
	syrk_csrq,
	syrk_jkzk,
	syrk_swsj,
	CURRENT_TIMESTAMP AS update_time 
FROM
	weijianwei_syrk_jbdjxx 
WHERE
	weijianwei_syrk_jbdjxx.is_delete != 1 
	AND weijianwei_syrk_jbdjxx.syrk_gmsfhm NOT IN ( SELECT syrk_rkjbxx.syrk_gmsfhm FROM syrk_rkjbxx )


Mysql语句层优化整理总结_承缘丶 -CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值