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 条评论
登录 后参与评论

相关文章

来自专栏Petrichor的专栏

论.idea文件夹是干嘛的

python为什么每次创建的文件目录下都含 .idea/文件夹?该文件夹又是用来干嘛的?

1653
来自专栏祝威廉

Spark Streaming 不同Batch任务可以并行计算么?

其实Stage,Task都是Spark Core里就有的概念,Job 在Streaming和Spark Core里的概念则是不一致的。Batch则是Stream...

703
来自专栏Linux驱动

QT-第一个程序 Hello QT , 以及QT creator介绍

第一个程序 - Hello QT 首先写main.cpp: #include <QApplication> #include <QMainWindow> #in...

3147
来自专栏个人分享

SparkSQL项目中的应用

Spark是一个通用的大规模数据快速处理引擎。可以简单理解为Spark就是一个大数据分布式处理框架。基于内存计算的Spark的计算速度要比Hadoop的MapR...

723
来自专栏张戈的专栏

Linux运维工程师:30道面试题整理

前段时间,我在准备面试的时搜到的一套 Linux 运维工程师面试题,感觉比较全面,一直保存在草稿,刚在整理后台时翻了出来,干脆就发出来好了,以备不时之需。 1....

7005
来自专栏向治洪

svn错误对照表

#, c-format msgid "Destination '%s' is not a directory" msgstr "目的 “%s” 不是目录" ...

2665
来自专栏程序猿

mssql注入

一些sql扩展 xp_regaddmultistring xp_regdeletekey 删除键名 xp_regdeletevalue 删除键值 xp_...

3658
来自专栏前端儿

前端自动化工具 -- Grunt 使用简介

grunt是基于nodejs的,所以需要一个 nodejs 环境,未了解的可以 来这看看

701
来自专栏机器学习和数学

[编程经验] Python中的modlue和packages的区别

今天聊一下,Python中模块和包的区别和联系,以及怎么创建自己的package,通过学习,你可以明白我们平时用Python的时候,到底import 了什么东西...

2443
来自专栏鬼谷君

django权限管理(Permission)

3044

扫码关注云+社区