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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql delete limit用法_你习惯delete语句后带上limit吗

發布時間:2024/4/18 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql delete limit用法_你习惯delete语句后带上limit吗 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

聲明:本文基于MySQL講解。

先不說習慣不習慣的,很多人也許會驚訝:還可以這樣操作?其實,大家對這個操作比較陌生,也不奇怪。因為,學海無涯呀~

語法

這個用法的詳細語法是這樣的:delete from table_name where ... limit row_count。

row_count表示行數,必須是單個數字,它會告知服務器在控制命令被返回到客戶端前被刪除的行的最大值。從而確保一個delete語句不會占用過多的時間。

Delete語句還可以包括一個Order By子句,那樣則會按照子句中指定的順序進行刪除。但是Order By子句必須與limit聯用是才起作用。例如,以下子句用于查找與WHERE子句對應的行,使用age進行排序,并刪除第一(年齡最大的)行:

delete from user where user_name = '馬云' order by age desc limit 1;

分析一個場景

在業務場景復雜的情況下,單表刪除帶上limit是一個很好的習慣。

因為,我們要知道delete刪除是不會釋放磁盤空間的。

假如在刪除執行中,第一行就命中了刪除行,如果不帶上limit,那么數據庫還會在全表掃描之后才return,這樣會很占用資源,數據量小還好說,但是如果這條表的數據量是100萬條,1000萬條呢,消耗的資源可想而知,而且效果還不好。如果SQL中有limit 1,那么在掃描第一行后就return了。

優點

以上面刪除年齡最大的行SQL語句為例,大致有以下幾個優點:降低delete的風險。加上limit row_count,最多損失row_count行數據。并且可以通過binlog找回,不會耗費多長時間,工作量也不大。

避免長事務,減少其他客戶端資源等待的時間。執行delete操作時,MySQL會將所有涉及的行加上寫鎖和Gap鎖(間隙鎖),如果user_name字段建立了索引,那么只鎖定user_name等于‘馬云’的數據,但是如果where條件的字段沒建索引,那么就會掃描到主鍵索引上,給全表加鎖,即便叫‘馬云’的只有一個人

減少CPU使用率。delete執行刪除的數據量大時,會將CPU打滿,導致后續刪除越來越慢。

總結

以上是生活随笔為你收集整理的mysql delete limit用法_你习惯delete语句后带上limit吗的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。