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吗的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 锐浪报表 多条数据集合到一个二维码中_【
- 下一篇: linux cmake编译源码,linu