操作delete或者update语句,加个limit或者循环分批次删除

简介: 操作delete或者update语句,加个limit或者循环分批次删除

1、降低写错SQL的代价

清空表数据可不是小事情,一个手抖全没了,删库跑路?如果加limit,删错也只是丢失部分数据,可以通过binlog日志快速恢复的。

2、SQL效率很可能更高

SQL中加了limit 1,如果第一条就命中目标return, 没有limit的话,还会继续执行扫描表。

3、避免长事务

delete执行时,如果age加了索引,MySQL会将所有相关的行加写锁和间隙锁,所有执行相关行会被锁住,如果删除数量大,会直接影响相关业务无法使用。

4、数据量大的话,容易把CPU打满

如果你删除数据量很大时,不加 limit限制一下记录数,容易把cpu打满,导致越删越慢。

5、锁表

一次性删除太多数据,可能造成锁表,会有lock wait timeout exceed的错误,所以建议分批操作。

相关文章
|
Java 数据库连接 mybatis
mybatismybatisPlus Update操作返回值不是影响行数
mybatismybatisPlus Update操作返回值不是影响行数
802 0
|
9月前
|
C语言
用continue语句提前结束本次循环
用continue语句提前结束本次循环
173 1
|
9月前
|
Python
使用continue语句提前结束本次循环
在编程中,循环结构是一种非常重要的控制流机制,它允许我们重复执行一段代码,直到满足某个条件为止。而在循环内部,有时我们可能希望在某些特定条件下跳过当前循环的剩余部分,直接进入下一次循环。这时,continue语句就显得非常有用。
109 0
|
SQL 数据库
数据库sql语句(count(*)和count(字段))
数据库sql语句(count(*)和count(字段))
195 0
|
关系型数据库 MySQL 索引
Mysql中REPLACE INTO用法,判断数据是否存在,如果不存在,则插入,如果存在,则先删除此行数据,然后插入新的数据...
Mysql中REPLACE INTO用法,判断数据是否存在,如果不存在,则插入,如果存在,则先删除此行数据,然后插入新的数据...
458 0
|
SQL 关系型数据库 MySQL
SELECT COUNT(*) 会造成全表扫描?回去等通知吧
网上有一种说法,针对无 where_clause 的 **COUNT(\*)**,MySQL 是有优化的,优化器会选择成本最小的辅助索引查询计数,其实反而性能最高,这种说法对不对呢 针对这个疑问,我首先去生产上找了一个千万级别的表使用 EXPLAIN 来查询了一下执行计划
500 0
|
SQL 关系型数据库 MySQL
十一、操作delete或者update语句,加个limit或者循环分批次删除
十一、操作delete或者update语句,加个limit或者循环分批次删除
362 0
|
SQL 关系型数据库 MySQL
select _ from t_student where class between 200 and 300需要执行几次索引树的搜索操作,会扫描多少行
select _ from t_student where class between 200 and 300需要执行几次索引树的搜索操作,会扫描多少行
170 1
|
SQL 存储 缓存
执行update语句,用没用到索引,区别大吗?
我们都知道,当执行 select 查询语句时,用没用到索引区别是很大的,若没用到索引,一条 select 语句可能执行好几秒或更久,若使用到索引则可能瞬间完成。那么当执行 update 语句时,用没用到索引有什么区别呢,执行时间相差大吗?本篇文章我们一起来探究下。
443 0
|
关系型数据库 MySQL 数据库
插入命令 insert 和查询命令 select 的组合使用|学习笔记
快速学习插入命令 insert 和查询命令 select 的组合使用
2471 0