温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

MySQL随机选取资源--优化

发布时间:2020-08-10 13:02:13 来源:ITPUB博客 阅读:150 作者:壹頁書 栏目:MySQL数据库
接前文:
http://blog.itpub.net/29254281/viewspace-2120294/

前文中,Order by rand()在数据量大的时候,会有一些性能问题.

  1. set autocommit=false;  
  2. set @roomid:=-1;  
  3. select   
  4.     min(roomid) into @roomid  
  5. from  
  6.     room_info  
  7. where  
  8.     roomid >   
  9.     (  
  10.         select   
  11.             floor(max(roomid) * rand() + 1)  
  12.         from  
  13.             room_info  
  14.     )  
  15.     and state = 1;  
  16.   
  17. update room_info   
  18. set   
  19.     state = 2  
  20. where  
  21.     roomid =@roomid  
  22.     and state = 1;  
  23.         
  24. select @roomid;    
  25.   
  26. commit;  

优化的方式就是从最大的ID,随机选取一个值。
这样避免了排序.
但是应用程序还是需要判断,Update的影响行数是否为0.如果为0,则需要再次调用.

大招版本:
  1. set autocommit=false;    
  2. set @roomid:=-1;    
  3. select max(roomid) into @roomid from room_info;    
  4. set @roomid:=floor(rand()*@roomid+1);  
  5. update room_info     
  6. set     
  7.     state = 2    
  8. where    
  9. roomid =    
  10. coalesce    
  11. (    
  12.     (select roomid from (select min(roomid) roomid from room_info where state=1 and roomid > @roomid) a),    
  13.     (select roomid from (select max(roomid) roomid from room_info where state=1 and roomid < @roomid) b)    
  14. )    
  15. and state = 1 and @roomid:=roomid;    
  16.           
  17. select @roomid;      
  18.     
  19. commit;    

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI