sql查詢最好是加上limit數量的限制

2021-09-02 10:41:47 字數 894 閱讀 5267

突然有一天,運營人員說,push傳送數量翻倍了,是什麼原因呢。

push傳送過多 排查步驟:

系統在給使用者傳送push的時候,是根據該使用者的id,查詢出所有登陸過的裝置,而傳送裝置的push的。

sql如下:

select

from push_user

where user_id=#userid#

and device_token is not null group by device_token

我們可以設想:如果乙個使用者修改手機資訊,偽造各種裝置,該語句返回的記錄數量將會是很多的,比如超高1萬甚至更多。

線上去檢視了下》1000的記錄數目

不看不知道,一看嚇一跳。

修改sql:

select

from push_user

where user_id=#userid#

and status=1

and device_token is not null group by device_token

order by id desc limit 10

只取前10個,當然大多數是小於10個的,但是得加上limit 10的限制,試想:如果某些使用者的記錄數》10000,系統記憶體肯定撐爆,一系列的問題隨著而來,full gc,系統變慢,導致不可用。

總結:在寫sql的時候,一定要加上limit的限制數量,也許開始數量並不多,但數量一旦多起來的時候,就是系統變慢的時候了,所有這篇文章在此記錄下。

sql 在排序後limit 查詢疑問

select from br spec as spec order by sp sort asc limit 0,10 select from br spec as spec order by sp sort 新增limit後 列表順序發生變化 一 現象 發現第一條sql和第二條sql的排序順序不一...

MySQL 中子查詢是不能使用LIMIT

mysql5.1中子查詢是不能使用limit的,報錯 this version of mysql doesn t yetsupport limit in all any some subquery 這樣的語句是不能正確執行的。select from table where id in select ...

SQL資料庫查詢LIMIT 資料分頁

sql資料庫查詢limit 資料分頁 sql的語句limit 約束select 查詢資料包表時,使得sql查詢語句返回指定的記錄數 行數 limit 可以設定1個或2個int整型常量數字作為引數。limit在資料分頁查詢時候十分有用,因為不是每一次查詢都需要 select from table 這麼...