博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
update in 的优化写法
阅读量:5878 次
发布时间:2019-06-19

本文共 732 字,大约阅读时间需要 2 分钟。

hot3.png

在一般的 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.xxset a.xx=要变更的值where b.xx=条件值

实际例子

第一种写法:

EXPLAINUPDATE 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

第二种写法:

EXPLAINUPDATE 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

转载于:https://my.oschina.net/zcqshine/blog/1816825

你可能感兴趣的文章
[Bzoj2246]迷宫探险(概率+DP)
查看>>
[译] 感受 4px 基线网格带来的便利
查看>>
oracle常用函数
查看>>
MYBATIS
查看>>
详解消息队列的设计与使用
查看>>
iOS 项目优化
查看>>
筛选出sql 查询结果中 不包含某个字符
查看>>
8进制与16进制
查看>>
使用Sqoop从mysql向hdfs或者hive导入数据时出现的一些错误
查看>>
mybatis:Invalid bound statement (not found)
查看>>
电脑中毒的现象
查看>>
django表单操作之django.forms
查看>>
ZipOutputStream出现多层目录问题
查看>>
webSocket vnc rfb
查看>>
列表推导式 生成器表达式
查看>>
控制子窗口的高度
查看>>
Linux 防火墙iptables命令详解
查看>>
打造笔记本电脑基地重庆要当全球“老大”
查看>>
处理 Oracle SQL in 超过1000 的解决方案
查看>>
《JAVA与模式》之简单工厂模式
查看>>