日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

CTO说了,delete后不加limit,直接滚蛋!

發(fā)布時(shí)間:2025/3/20 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CTO说了,delete后不加limit,直接滚蛋! 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

點(diǎn)擊上方?好好學(xué)java?,選擇?星標(biāo)?公眾號(hào)

重磅資訊、干貨,第一時(shí)間送達(dá)

今日推薦:又一程序員進(jìn)了ICU:壓垮一個(gè)家庭,一張結(jié)算單就夠

個(gè)人原創(chuàng)100W+訪問(wèn)量博客:點(diǎn)擊前往,查看更多

在業(yè)務(wù)場(chǎng)景要求高的數(shù)據(jù)庫(kù)中,對(duì)于單條刪除和更新操作,在 delete 和 update 后面加 limit 1 絕對(duì)是個(gè)好習(xí)慣。

比如,在刪除執(zhí)行中,第一條就命中了刪除行,如果 SQL 中有 limit 1;這時(shí)就 return 了,否則還會(huì)執(zhí)行完全表掃描才 return。效率不言而喻。

那么,在日常執(zhí)行 delete 時(shí),我們是否需要養(yǎng)成加 limit 的習(xí)慣呢?是不是一個(gè)好習(xí)慣呢?

在日常的 SQL 編寫(xiě)中,你寫(xiě) delete 語(yǔ)句時(shí)是否用到過(guò)以下 SQL?delete from t where sex = 1 limit 100;

你或許沒(méi)有用過(guò),在一般場(chǎng)景下,我們對(duì) delete 后是否需要加 limit 的問(wèn)題很陌生,也不知有多大區(qū)別,今天帶你來(lái)了解一下,記得 mark!

寫(xiě)在前面,如果是清空表數(shù)據(jù)建議直接用 truncate,效率上 truncate 遠(yuǎn)高于 delete,因?yàn)?truncate 不走事務(wù),不會(huì)鎖表,也不會(huì)生產(chǎn)大量日志寫(xiě)入日志文件。

truncate table table_name 后立刻釋放磁盤(pán)空間,并重置 auto_increment 的值。delete 刪除不釋放磁盤(pán)空間,但后續(xù) insert 會(huì)覆蓋在之前刪除的數(shù)據(jù)上。

下面只討論 delete 場(chǎng)景,首先,delete 后面是支持 limit 關(guān)鍵字的,但僅支持單個(gè)參數(shù),也就是 [limit row_count],用于告知服務(wù)器在控制命令被返回到客戶端前被刪除的行的最大值。

delete limit 語(yǔ)法如下:delete [low_priority] [quick] [ignore] from tbl_name [where ...] [order by ...] [limit row_count]

值得注意的是,order by 必須要和 limit 聯(lián)用,否則就會(huì)被優(yōu)化掉。

加 limit 的的優(yōu)點(diǎn)

delete from t where sex = 1;

以上面的這條 SQL 為例:

  • 降低寫(xiě)錯(cuò) SQL 的代價(jià),就算刪錯(cuò)了,比如 limit 500,那也就丟了 500 條數(shù)據(jù),并不致命,通過(guò) binlog 也可以很快恢復(fù)數(shù)據(jù)。

  • 避免了長(zhǎng)事務(wù),delete 執(zhí)行時(shí) MySQL 會(huì)將所有涉及的行加寫(xiě)鎖和 Gap 鎖(間隙鎖),所有 DML 語(yǔ)句執(zhí)行相關(guān)行會(huì)被鎖住,如果刪除數(shù)量大,會(huì)直接影響相關(guān)業(yè)務(wù)無(wú)法使用。

  • delete 數(shù)據(jù)量大時(shí),不加 limit 容易把 CPU 打滿,導(dǎo)致越刪越慢。

針對(duì)上述第二點(diǎn),前提是 sex 上加了索引。大家都知道,加鎖都是基于索引的,如果 sex 字段沒(méi)索引,就會(huì)掃描到主鍵索引上,那么就算 sex=1 的只有一條記錄,也會(huì)鎖表。

對(duì)于 delete limit 的使用,MySQL 大佬丁奇有一道題:

如果你要?jiǎng)h除一個(gè)表里面的前 10000 行數(shù)據(jù),有以下三種方法可以做到:

第一種,直接執(zhí)行 delete from T limit 10000;

第二種,在一個(gè)連接中循環(huán)執(zhí)行 20 次 delete from T limit 500;

第三種,在 20 個(gè)連接中同時(shí)執(zhí)行 delete from T limit 500。

你先考慮一下,再看看幾位老鐵的回答:

回答一

方案一,事務(wù)相對(duì)較長(zhǎng),則占用鎖的時(shí)間較長(zhǎng),會(huì)導(dǎo)致其他客戶端等待資源時(shí)間較長(zhǎng)。

方案二,串行化執(zhí)行,將相對(duì)長(zhǎng)的事務(wù)分成多次相對(duì)短的事務(wù),則每次事務(wù)占用鎖的時(shí)間相對(duì)較短,其他客戶端在等待相應(yīng)資源的時(shí)間也較短。

這樣的操作,同時(shí)也意味著將資源分片使用(每次執(zhí)行使用不同片段的資源),可以提高并發(fā)性。方案三,人為自己制造鎖競(jìng)爭(zhēng),加劇并發(fā)量。

方案二相對(duì)比較好,具體還要結(jié)合實(shí)際業(yè)務(wù)場(chǎng)景。

回答二

不考慮數(shù)據(jù)表的訪問(wèn)并發(fā)量,單純從這個(gè)三個(gè)方案來(lái)對(duì)比的話。

第一個(gè)方案,一次占用的鎖時(shí)間較長(zhǎng),可能會(huì)導(dǎo)致其他客戶端一直在等待資源。第二個(gè)方案,分成多次占用鎖,串行執(zhí)行,不占有鎖的間隙其他客戶端可以工作,類(lèi)似于現(xiàn)在多任務(wù)操作系統(tǒng)的時(shí)間分片調(diào)度,大家分片使用資源,不直接影響使用。第三個(gè)方案,自己制造了鎖競(jìng)爭(zhēng),加劇并發(fā)。

至于選哪一種方案要結(jié)合實(shí)際場(chǎng)景,綜合考慮各個(gè)因素吧,比如表的大小,并發(fā)量,業(yè)務(wù)對(duì)此表的依賴程度等。

回答三

①直接 delete 10000 可能使得執(zhí)行事務(wù)時(shí)間過(guò)長(zhǎng)。

②效率慢點(diǎn)每次循環(huán)都是新的短事務(wù),并且不會(huì)鎖同一條記錄,重復(fù)執(zhí)行 DELETE 知道影響行為 0 即可。

③效率雖高,但容易鎖住同一條記錄,發(fā)生死鎖的可能性比較高。

怎么刪除表的前 10000 行。比較多的朋友都選擇了第二種方式,即:在一個(gè)連接中循環(huán)執(zhí)行 20 次 delete from T limit 500。

確實(shí)是這樣的,第二種方式是相對(duì)較好的。

第一種方式(即:直接執(zhí)行 delete from T limit 10000)里面,單個(gè)語(yǔ)句占用時(shí)間長(zhǎng),鎖的時(shí)間也比較長(zhǎng);而且大事務(wù)還會(huì)導(dǎo)致主從延遲。

第三種方式(即:在 20 個(gè)連接中同時(shí)執(zhí)行 delete from T limit 500),會(huì)人為造成鎖沖突。

這個(gè)例子對(duì)我們實(shí)踐的指導(dǎo)意義就是,在刪除數(shù)據(jù)的時(shí)候盡量加 limit。這樣不僅可以控制刪除數(shù)據(jù)的條數(shù),讓操作更安全,還可以減小加鎖的范圍。

所以,在 delete 后加 limit 是個(gè)值得養(yǎng)成的好習(xí)慣。

作者:陳哈哈 簡(jiǎn)介:MySQL 社區(qū)的非著名貢獻(xiàn)者,善于白嫖知識(shí);陪伴 MySQL 五年,致力于高性能 SQL、事務(wù)鎖優(yōu)化方面的研究;長(zhǎng)路漫漫,希望通過(guò)自己的分享讓大家少踩一些坑。我是陳哈哈,一個(gè)愛(ài)笑的程序員。編輯:陶家龍 出處:轉(zhuǎn)載自公眾號(hào) MySQL 江湖路(ID:mysql_chenhaha)

原創(chuàng)電子書(shū)

歷時(shí)整整一年總結(jié)的?Java 面試 + Java 后端技術(shù)學(xué)習(xí)指南,這是本人這幾年及校招的總結(jié),各種高頻面試題已經(jīng)全部進(jìn)行總結(jié),按照章節(jié)復(fù)習(xí)即可,已經(jīng)拿到了大廠offer。

原創(chuàng)思維導(dǎo)圖

掃碼或者微信搜?程序員的技術(shù)圈子?回復(fù)?面試?領(lǐng)取原創(chuàng)電子書(shū)和思維導(dǎo)圖。

總結(jié)

以上是生活随笔為你收集整理的CTO说了,delete后不加limit,直接滚蛋!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一级特黄妇女高潮2 | 亚洲自拍三区 | 青娱网电信一区电信二区电信三区 | 亚欧美精品| 看av免费毛片手机播放 | 麻豆免费在线观看视频 | 四虎成人精品永久免费av | 亚洲av中文无码乱人伦在线视色 | 久久久精品一区二区涩爱 | 色欧美88888久久久久久影院 | 澳门黄色录像 | 成人免费观看视频 | 99爱爱| 日本三级欧美三级 | 无码aⅴ精品一区二区三区 精品久久在线 | 啪啪网站免费观看 | 夜夜欢视频 | 日本精品黄色 | 一级伦理片 | 日韩av线上 | 日韩免费在线视频观看 | 免费看成人aa片无码视频羞羞网 | 九九久视频 | 欧洲黄色录像 | 日韩福利片在线观看 | 精品久久福利 | 美女主播福利视频 | 天堂va蜜桃一区二区三区 | 国产女人和拘做受视频免费 | 国产免费一区二区三区在线观看 | 91一区二区三区在线观看 | 哪里看毛片 | 波多野结衣中文字幕在线播放 | 精品黑人一区二区三区久久 | 亚洲无吗一区二区三区 | 黄色成人av | 高h视频在线播放 | 日韩av网址大全 | 国产婷婷色一区二区三区 | 欧美黑人精品一区二区 | 国产乱妇乱子 | 亚洲欧美一区二区三区 | 一本久久道 | av一区二| 一区二区欧美在线观看 | 看全黄大色黄大片 | 手机在线看片你懂的 | 国产老熟妇精品观看 | 国产又黄又猛又爽 | 日韩午夜在线观看 | 99蜜桃臀久久久欧美精品网站 | 好吊妞视频这里只有精品 | 国产一区二区网 | 久草久草久草 | 91精品国产入口 | 亚洲毛片一区二区三区 | 日本少妇做爰全过程毛片 | 粉嫩av一区 | 狠狠艹视频 | 一区二区三区中文字幕在线观看 | 日本一区二区三区中文字幕 | 在线观看超碰 | 天天爱天天色 | 秋霞视频一区二区 | 久久草国产| 狠狠干一区二区 | 95视频在线 | 成人夜色视频 | 一级免费大片 | 久久99精品国产91久久来源 | www.黄色网址 | 色牛影院 | 日本特级黄色录像 | 亚洲精品v天堂中文字幕 | 少妇按摩一区二区三区 | 久久久久三级 | 一区在线观看 | 亚洲欧美国产精品 | 全部免费毛片 | 亚洲视频国产视频 | 国产精品无码无卡无需播放器 | 日韩高清不卡一区 | 一区二区三区四区不卡 | 自拍偷拍日韩精品 | 亚洲熟妇一区二区三区 | 中文字幕资源网 | 久久午夜伦理 | 91天天射 | 久久亚洲AV无码专区成人国产 | 国产综合精品久久久久成人影 | 欧美精品自拍 | 国产亚洲AV无码成人网站在线 | 九九热在线播放 | 国产91在线视频观看 | 日日噜噜噜噜久久久精品毛片 | 免费看黄视频的网站 | 国产乱人伦精品一区二区 | 91福利在线观看视频 | 欧美日韩人妻精品一区二区三区 |