我个人认为,暂时并没有十全十美的解决办法,关于这个order byrand()重复多次扫描表的问题,如果你的数据超过10万,效率低的能吓死你。网上有解决办法:
这种解决办法的致命问题是,每次只能查询一条,你要是随机抽取100条数据,就得循环一百次来查询,岂不是要命?如果直接把LIMIT后面的数值改成超过1,那么得到的将会是连续的行数,那是不可以的。 小弟也曾闻,有牛叉的工程师就是这么解决的。 小弟的解决办法是:用程序语言,比如php随机产生你需要的随机数:略大于需要的数量,然后从中抽出需要的数据,这样基本算是一个比较好的解决办法。
这种办法查询出来的数据有可能是你一下子查到来一个死角,比如你产生的随机id里,刚好只有不到10条的有效记录,那怎么办?重复查询呗! while(count($rand_data)<10){ // 重复查询 } from:http://blog.sina.com.cn/s/blog_6f1f9ead0100rtfu.html |
|Archiver|手机版|小黑屋|创星网络
( 苏ICP备11027519号 )
|网站地图
GMT+8, 2025-2-22 16:54 , Processed in 0.054485 second(s), 16 queries .
Powered by Discuz! X3
© 2001-2013 Comsenz Inc.