瑞蜀黍

导航

 

delete from t where age=19 limit 100;
delete from t where age=19;

区别:

delete limit语法:

delete [low_priority] [quick] [ignore] from tbl_name
[where ...]
[order by ...]
[limit row_count]

加limit的优点:
1、降低删除数据的代价,就算删除,也只是删除100条,可以通过binlog快速找回。
2、避免长事务,delete执行时MySQL会将所有涉及的行加写锁和Gap锁(间隙锁),所有的MDL语句执行相关行会被锁住,如果删除的数据量大,会直接影响相关业务无法使用。(前提是age上加了索引,加锁都是基于索引的,如果age字段没有加索引,就会扫描到主键索引上,那么就算age =19的只有一条记录,也会锁表。)
3、delete数据量大时,不加limit容易讲CPU打满,导致越删越慢。

联想:
如果是清空表数据建议直接使用truncate,效率上远远高于delete,因为truncate不走事务,不会锁表,也不会产生大量的日志写入日志文件;truncate table table_name 后立刻回释放磁盘空间,并重置auto_increment的值。

posted on 2021-07-29 16:20  瑞蜀黍  阅读(522)  评论(0)    收藏  举报