MySQL随机选取资源--优化
短信预约 -IT技能 免费直播动态提醒
接前文:
http://blog.itpub.net/29254281/viewspace-2120294/
前文中,Order by rand()在数据量大的时候,会有一些性能问题.
优化的方式就是从最大的ID,随机选取一个值。
这样避免了排序.
但是应用程序还是需要判断,Update的影响行数是否为0.如果为0,则需要再次调用.
大招版本:
http://blog.itpub.net/29254281/viewspace-2120294/
前文中,Order by rand()在数据量大的时候,会有一些性能问题.
- set autocommit=false;
- set @roomid:=-1;
- select
- min(roomid) into @roomid
- from
- room_info
- where
- roomid >
- (
- select
- floor(max(roomid) * rand() + 1)
- from
- room_info
- )
- and state = 1;
- update room_info
- set
- state = 2
- where
- roomid =@roomid
- and state = 1;
- select @roomid;
- commit;
优化的方式就是从最大的ID,随机选取一个值。
这样避免了排序.
但是应用程序还是需要判断,Update的影响行数是否为0.如果为0,则需要再次调用.
大招版本:
- set autocommit=false;
- set @roomid:=-1;
- select max(roomid) into @roomid from room_info;
- set @roomid:=floor(rand()*@roomid+1);
- update room_info
- set
- state = 2
- where
- roomid =
- coalesce
- (
- (select roomid from (select min(roomid) roomid from room_info where state=1 and roomid > @roomid) a),
- (select roomid from (select max(roomid) roomid from room_info where state=1 and roomid < @roomid) b)
- )
- and state = 1 and @roomid:=roomid;
- select @roomid;
- commit;
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341