换一种思路,循环插入数据库是否必要?

本文介绍了一种优化网站消息系统的方案,避免了对大量用户逐一发送消息的效率低下问题。通过在数据库层面增加对全体用户的标识,实现了只需一次操作即可完成对所有用户的广播通知。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天BOSS要我对网站所有的会员发一条消息,原来的系统是通过后台对每个会员发【每次只能选择一个或者多个,但不能选择全部】,前台根据消息表message_info里的user_id字段查询出对应该会员的消息。

本系统采用SSH+MYSQL
message_info数据结构如下
-------------- ------------------------------- -------
ID bigint(20)
TITLE varchar(255)
CONTENT text
USER_ID bigint(20)
PUBER_ID bigint(20)
CREATED_TIME datetime

前台查询语句如下:[这是翻译后的SQL,本是HQL]
select * from message_info where userId=${user.id} order by id desc

思路一:“写一个循环插入语句,在数据库里运行”
由于我对MYSQL不是很熟,所以我花了1个小时去研究该怎样写SQL,但最终还是放弃了。大概思路就是建立一个存储过程然后里面加一个循环。

思路二:“在程序中for循环Insert语句”
这个实现起来相对简单一些,不过需要改代码,服务器需要重启。

吃过饭后,坐在电脑前休息了一会,突然想到,网站现在只有上千的会员,但要是以后上万甚至上十万难道 还要继续这样循环插入么?一个是速度慢,影响服务器性能甚至可能直接导致服务器崩溃。第二个,这么多数据插到数据库里,有什么坏处地球人都应该知道吧。
于是我马上想到从SQL语句下手,方案如下:
SQL语句更改为:
select * from message_info where userId=${user.id} or userId=0 order by id desc

//userId=0用于表示所有userId,id是标识列,这里的0也可以用其他负数代替

插入语句:
INSERT INTO message_info
(title,content,user_id,puber_id,created_time)
VALUES('测试所有',
'三大随碟附送大时代<br><br>更多详情请点击<A target=_blank href=http://www.wibowibo.com/space.do?m=index&id=10>http://www.wibowibo.com/space.do?m=index&id=10</a> ',
0,
1,
now())

这样我只更改了前台的HQL【由于使用了自定义标签,所以服务器不需要重启】,数据库里只插入了一条信息,这样就解决BOSS交给我的问题,而不用再去写什么循环插入语句了~


总结:在我们编写循环插入语句的时候,最好先问一下自己,这样做是不是必要的?这样做是不是最适合的?作为程序员,实现一个功能有很多种方式,也许没有最好的方式,但一定有一个是最适合的,“退一步,海阔天空”。
程序员是脑力劳动者,所以当你在不断的重复同样的工作时,你就该想想,有什么方法可以替代这些无聊的步骤,作为程序员,就应该让自己变得“懒”点。

第一次写东东,表达能力有限,欢迎高手指点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值