update in 的优化写法

在一般的 update in 写法就是:

update table_name set column = 'xxx' where column2 in (select x from table_name2 where xxxxxx)

但是这种写法在表数据量小的时候不会有啥问题, 但是在表的数据量比较大的情况下, 这样就会引起全表扫描, 子查询带来了巨大的资源开销,以及锁表.

优化后的写法如下:

update table_a a join table_b b on a.xx=b.xx
set a.xx=要变更的值
where b.xx=条件值

实际例子

第一种写法:

EXPLAIN
UPDATE t_form_template_function SET del_flag = '1' WHERE struct_id IN ( SELECT DISTINCT id FROM t_form_template_struct WHERE pid = 'GE148389280359880457831') and del_flag='0' ;

分析结果为: rows : 6661

第二种写法:

EXPLAIN
UPDATE t_form_template_function f JOIN t_form_template_struct s ON f.struct_id = s.id SET f.del_flag = '1' 
WHERE s.pid = 'GE148389280359880457831' AND f.del_flag = '0';

分析结果为: rows: 6

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏mwangblog

开始使用MySQL

1682
来自专栏Netkiller

数据库安全·为数据安全而分库

以下节选择《Netkiller Architect 手札》地址 http://www.netkiller.cn/architect/ 接下来几周的话题是数据库安...

3428
来自专栏WindCoder

当 NOT NULL DEFAULT遇到 Invalid use of NULL value

ERROR 1138 (22004) at line 7: Invalid use of NULL value

1241
来自专栏Dato

浅谈 DML、DDL、DCL的区别

一、DML DML(data manipulation language)数据操纵语言:     就是我们最经常用到的 SELECT、UPDATE、INSERT...

3617
来自专栏运维技术迷

MySQL数据库(五):索引

一.什么是索引 相当于一本数的目录 二.使用索引的好处和坏处 好处:加快查找速度 坏处:占用磁盘空间 三.查看索引命令 命令格式: show inde...

2829
来自专栏我的博客

MySQL触发器

1、触发器定义就不说了,既然能看到我这个文章就肯定明白这个定义了。用途也不多说,来看继续向下看吧! 触发器语法: CREATE TRIGGER <触发器名称...

2625
来自专栏乐沙弥的世界

批量生成MySQL不重复手机号大表

版权声明:本文为博主原创文章,欢迎扩散,扩散请务必注明出处。

852
来自专栏乐沙弥的世界

一次mysql 5.5升级到5.6导致的ERROR 1805

前阵子将mysql数据库由5.5.14升级到5.6.36,升级后所有的业务数据都正常。运行了几天后,发现在主库上添加用户失败,错误提示为:ERROR 1805 ...

932
来自专栏抠抠空间

mysql清空有外键关联的表

SET FOREIGN_KEY_CHECKS = 0;    TRUNCATE TABLE 表名;   SET FOREIGN_KEY_CHECKS = 1; 

904
来自专栏lgp20151222

Mysql 如何设置字段自动获取当前时间,附带添加字段和修改字段的例子

ALTER TABLE `table_name` ADD COLUMN  `CreateTime` datetime NULL DEFAULT CURRENT...

1151

扫码关注云+社区