我们都知道,mysql里用到ORDER BY RAND()在数据量比较多的时候是很慢的,因为会导致mysql全表扫描,故也不会用到索引,
所以ORDER BY RAND()用来随机时已经是到禁区里了,所以我们应该尽量避免使用ORDER BY RAND()才对,所以这个是需要用其他方法替代或者优化才行。
当我们随机一条数据时可以考虑一下:
[php] $DBI=new dbi2($__DBserver); $num=$DBI->result('select count(1) as num from article');//获取总条数,数据库引擎为MyISAM采用吧 $num=$num[0]['num']-1; $num=rand(1, $num); $list=$DBI->result('SELECT id FROM acticle ORDER BY viewcount DESC LIMIT ?,1',$num);//利用limit
随机多条数据时,为了避免全表扫描,可以取出一小部分在随机,这个随机性会落在一个小范围内:
[php] $DBI=new dbi2($__DBserver); //在200条范围内取10条随机 $list=$DBI->result('SELECT id FROM (SELECT id FROM acticle ORDER BY viewcount DESC LIMIT ?)X ORDER BY RAND() LIMIT ?',200,10);
内容版权声明:除非注明,否则皆为本站原创文章。
转载注明出处:https://sulao.cn/post/136
相关推荐
- flask连接mysql使用peewee连接池
- ubuntu在线安装mysql8无法使用账户密码登陆的问题
- ubuntu22.04编译安装mysql8
- flask使用celery异步定时任务备份mysql数据库
- mysql8登录报错Host '127.0.0.1' is not allowed to connect...
- python使用peewee(ORM)操作mysql数据库
- MySQL CPU占用过高的排查方法
- docker-compose编排lnmp(nginx+php+mysql)环境
- docker和docker-compose分别部署mysql5.7
- centos7编译安装mysql8
评论列表