网易首页 > 网易号 > 正文 申请入驻

delete后加 limit是个好习惯么

0
分享至

在业务场景要求高的数据库中,对于单条删除和更新操作,在delete和update后面加limit 1绝对是个好习惯。

比如,在删除执行中,第一条就命中了删除行,如果SQL中有limit 1;这时就return了,否则还会执行完全表扫描才return。效率不言而喻。那么,在日常执行delete时,我们是否需要养成加 limit 的习惯呢?是不是一个好习惯呢?

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

delete from t where sex = 1 limit 100;

你或许没有用过,在一般场景下,我们对 delete 后是否需要加 limit 的问题很陌生,也不知有多大区别,今天带你来了解一下,记得mark!写在前面,如果是清空表数据建议直接用truncate,效率上truncate远高于delete,应为truncate不走事务,不会锁表,也不会生产大量日志写入日志文件;truncate table table_name 后立刻释放磁盘空间,并重置auto_increment的值。

delete删除不释放磁盘空间,但后续insert会覆盖在之前删除的数据上。详细了解:

https://blog.csdn.net/qq_39390545/article/details/107144859

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

delete limit语法如下:

(值得注意的是,当需要用到order by排序时,必须order by + limit联用,否则order by 就会被优化器优化掉,被认为无意义。)

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

加limit的的优点:

以下面的这条SQL为例:

delete from t where sex = 1;

  • 1. 降低写错SQL的代价,就算删错了,比如limit 500,那也就丢了500条数据,并不致命,通过binlog也可以很快恢复数据。
  • 2. 避免了长事务,delete执行时MySQL会将所有涉及的行加写锁和Gap锁(间隙锁),所有DML语句执行相关行会被锁住,如果删除数量大,会直接影响相关业务无法使用。
  • 3. delete数据量大时,不加limit容易把cpu打满,导致越删越慢。

针对上述第二点,前提是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。

  • 方案一,事务相对较长,则占用锁的时间较长,会导致其他客户端等待资源时间较长。
  • 方案二,串行化执行,将相对长的事务分成多次相对短的事务,则每次事务占用锁的时间相对较短,其他客户端在等待相应资源的时间也较短。这样的操作,同时也意味着将资源分片使用(每次执行使用不同片段的资源),可以提高并发性。
  • 方案三,人为自己制造锁竞争,加剧并发量。
  • 方案二相对比较好,具体还要结合实际业务场景。

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

  • 第一个方案,一次占用的锁时间较长,可能会导致其他客户端一直在等待资源。
  • 第二个方案,分成多次占用锁,串行执行,不占有锁的间隙其他客户端可以工作,类似于现在多任务操作系统的时间分片调度,大家分片使用资源,不直接影响使用。
  • 第三个方案,自己制造了锁竞争,加剧并发。

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

~嗡嗡:

  • 1. 直接delete 10000可能使得执行事务时间过长
  • 2. 效率慢点每次循环都是新的短事务,并且不会锁同一条记录,重复执行DELETE知道影响行为0即可
  • 3. 效率虽高,但容易锁住同一条记录,发生死锁的可能性比较高

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

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

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

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

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
莫名其妙!印媒:15名解放军士兵头部受印军重击生还希望渺茫

莫名其妙!印媒:15名解放军士兵头部受印军重击生还希望渺茫

小弟萝卜呀1
2024-05-28 21:43:35
你什么时候意识到自己没见过世面?网友:想买辆迈巴赫…

你什么时候意识到自己没见过世面?网友:想买辆迈巴赫…

黄丽搞笑小能手
2024-06-01 20:15:46
世纪名场面,美航母被胡塞导弹击中起火

世纪名场面,美航母被胡塞导弹击中起火

煮酒杂谈
2024-06-01 10:49:43
他因病不满足军衔晋升要求,45岁离休,成最年轻休养员,休养45年

他因病不满足军衔晋升要求,45岁离休,成最年轻休养员,休养45年

战域笔墨
2024-06-02 00:55:11
上海房东,快被砍哭了

上海房东,快被砍哭了

魔都财观
2024-06-02 08:41:25
降维打击!易建联参加综艺秀劈扣 球迷调侃赶快回广东队

降维打击!易建联参加综艺秀劈扣 球迷调侃赶快回广东队

胖子喷球
2024-06-01 20:52:58
疑点重重!20岁中国女留学生坠亡 其父最新爆料:生前财物下落不明!

疑点重重!20岁中国女留学生坠亡 其父最新爆料:生前财物下落不明!

华人生活网
2024-06-02 03:09:26
人死后能看到什么?农村老光棍死后还魂的亲身经历,听后毛骨悚然

人死后能看到什么?农村老光棍死后还魂的亲身经历,听后毛骨悚然

故事家说历史
2024-05-26 20:42:04
惠台政策正式逆转,台湾以加强两岸交流进行反制

惠台政策正式逆转,台湾以加强两岸交流进行反制

远方青木
2024-06-02 00:10:27
中资银行或被驱逐!西方专家称美联储已破产,为自救耶伦连开两枪

中资银行或被驱逐!西方专家称美联储已破产,为自救耶伦连开两枪

趣史微视频
2024-06-01 09:17:13
大S再迎烦心事,遭台媒和韩媒双重爆料,提供“药”者是黄姓艺人

大S再迎烦心事,遭台媒和韩媒双重爆料,提供“药”者是黄姓艺人

娱乐八卦木木子
2024-06-01 23:14:59
林毅夫教授,网民喊您兑现“光刻机三年之约”……

林毅夫教授,网民喊您兑现“光刻机三年之约”……

故园老丁
2024-05-30 19:33:58
为什么外国妈妈带娃很轻松,我国却很难?网友的回复如出一辙!

为什么外国妈妈带娃很轻松,我国却很难?网友的回复如出一辙!

阿燕姐说育儿
2024-06-02 00:13:48
未来这七大专业吃香,张雪峰力荐:我学了我能干,你没学干不了

未来这七大专业吃香,张雪峰力荐:我学了我能干,你没学干不了

妍妍教育日记
2024-05-31 21:12:33
最后的“椰子鞋”上市,已无消费者排队等待

最后的“椰子鞋”上市,已无消费者排队等待

界面新闻
2024-05-31 15:34:10
真被郭台铭说对了?富士康出走“不赏饭”后,营收反创新高

真被郭台铭说对了?富士康出走“不赏饭”后,营收反创新高

小马哥谈体育
2024-06-01 17:32:02
网友爆料三亚海滩尽是中外搭配!网友笑问:她们要彩礼吗?

网友爆料三亚海滩尽是中外搭配!网友笑问:她们要彩礼吗?

大道微言
2024-06-01 17:52:13
深圳两市直单位换“一把手”!

深圳两市直单位换“一把手”!

南方都市报
2024-06-01 21:18:12
优雅转身,黑裤之美

优雅转身,黑裤之美

白宸侃片
2024-06-01 18:49:51
卡瓦哈尔一锤定音!破欧冠9年球荒,第六冠将到手,追平亨托

卡瓦哈尔一锤定音!破欧冠9年球荒,第六冠将到手,追平亨托

奥拜尔
2024-06-02 04:45:56
2024-06-02 09:34:44
互联网干货博主
互联网干货博主
我是专注分享互联网干货的博主
278文章数 1339关注度
往期回顾 全部

科技要闻

余承东:不卷价格!雷军:将双班制生产!

头条要闻

美方带头允许援乌武器打击俄境内 北约秘书长表态

头条要闻

美方带头允许援乌武器打击俄境内 北约秘书长表态

体育要闻

女排最强2主攻合体 合砍40分打懵泰国

娱乐要闻

白玉兰提名:胡歌、范伟争视帝

财经要闻

实锤!普华永道,危!

汽车要闻

吉利银河E5 Flyme Auto智能座舱首发

态度原创

艺术
本地
时尚
公开课
军事航空

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

本地新闻

食味印象|歙县限定!枇杷味儿的清甜初夏

将“简单款”穿出高级感的女人,我只服她们,年过40也优雅

公开课

近视只是视力差?小心并发症

军事要闻

匈牙利总理:欧洲已进入对俄开战准备阶段

无障碍浏览 进入关怀版