mysql中delete后加limit好不好

发布时间:2022-01-14 14:25:01 作者:小新
来源:亿速云 阅读:251

这篇文章主要介绍mysql中delete后加limit好不好,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

在业务场景要求高的数据库中,对于单条删除和更新操作,在 delete 和 update 后面加 limit 1 绝对是个好习惯。比如,在删除执行中,第一条就命中了删除行,如果 SQL 中有 limit 1;这时就 return 了,否则还会执行完全表扫描才 return。效率不言而喻。

那么,在日常执行 delete 时,我们是否需要养成加 limit 的习惯呢?是不是一个好习惯呢?

在日常的 SQL 编写中,你写 delete 语句时是否用到过以下 SQL?

delete from t where sex = 1 limit 100; 
 

你或许没有用过,在一般场景下,我们对 delete 后是否需要加 limit 的问题很陌生,也不知有多大区别!

下面只讨论 delete 场景,首先,delete 后面是支持 limit 关键字的,但仅支持单个参数,也就是 [limit row_count],用于告知服务器在控制命令被返回到客户端前被删除的行的最大值。

delete limit 语法如下,值得注意的是,order by 必须要和 limit 联用,否则就会被优化掉。

delete \[low\_priority\] \[quick\] \[ignore\] from tbl\_name
  \[where ...\]
    \[order by ...\]
      \[limit row\_count\]
   

加 limit 的的优点:

「以下面的这条 SQL 为例:」

delete from t where sex = 1; 
   
 

针对上述第二点,前提是 sex 上加了索引,大家都知道,「加锁都是基于索引的,如果 sex 字段没索引,就会扫描到主键索引上,那么就算 sex = 1 的只有一条记录,也会锁表。」

「对于 delete limit 的使用,MySQL 大佬丁奇有一道题:」

❝  

如果你要删除一个表里面的前 10000 行数据,有以下三种方法可以做到:第一种,直接执行 delete from T limit 10000; 第二种,在一个连接中循环执行 20 次 delete from T limit 500; 第三种,在 20 个连接中同时执行 delete from T limit 500。

❞  

你先考虑一下,再看看几位老铁的回答:

「Tony Du:」

「肉山:」

不考虑数据表的访问并发量,单纯从这个三个方案来对比的话。

至于选哪一种方案要结合实际场景,综合考虑各个因素吧,比如表的大小,并发量,业务对此表的依赖程度等。

「~嗡嗡:」

怎么删除表的前 10000 行。比较多的朋友都选择了第二种方式,即:在一个连接中循环执行 20 次 delete from T limit 500。确实是这样的,第二种方式是相对较好的。

第一种方式(即:直接执行 delete from T limit 10000)里面,单个语句占用时间长,锁的时间也比较长;而且大事务还会导致主从延迟。

第三种方式(即:在 20 个连接中同时执行 delete from T limit 500),会人为造成锁冲突。

这个例子对我们实践的指导意义就是,在删除数据的时候尽量加 limit。这样不仅可以控制删除数据的条数,让操作更安全,还可以减小加锁的范围。所以,在 delete 后加 limit 是个值得养成的好习惯。

以上是“mysql中delete后加limit好不好”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

推荐阅读:
  1. mysql如何使用delete
  2. MySQL中如何使用limit

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mysql delete limit

上一篇:clickhouse SQL优化技巧有哪些

下一篇:springboot整合quartz定时任务框架的方法是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》