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的值。
浙公网安备 33010602011771号