`
cfyme
  • 浏览: 263414 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

sql查询最好是加上limit数量的限制

 
阅读更多

突然有一天,运营人员说,push发送数量翻倍了,是什么原因呢。

 

push发送过多 排查步骤:

 

系统在给用户发送push的时候,是根据该用户的id,查询出所有登陆过的设备,而发送设备的push的。

    sql如下:

SELECT
	<include refid="Push_User_Columns_PAY"/>
FROM  push_user
WHERE user_id=#userId#
AND device_token is not null group by device_token

 

我们可以设想:如果一个用户修改手机信息,伪造各种设备,该语句返回的记录数量将会是很多的,比如超高1万甚至更多。

 

线上去查看了下>1000的记录数目


 

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

 

修改sql:

 

SELECT
        <include refid="Push_User_Columns_PAY"/>
        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的限制数量,也许开始数量并不多,但数量一旦多起来的时候,就是系统变慢的时候了,所有这篇文章在此记录下。

  • 大小: 43.4 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics