为了保证数据足够多,请使用快速插入数据sql语句
insert into tbl (id,title) (SELECT id,title from tbl);
一开始我也非常喜欢mysql的至简,比如分页,就连获取随机也是这么方便。相信大家对这条随机肯定十分熟悉
SELECT * FROM `tbl` ORDER BY RAND() LIMIT 5
事实上面我也非常喜欢,因为它简单而且体现的非常快,包括Wordpress获取随机文章默认也是这种形式。
这条在小数据量的时候,是看不出它具体有什么问题的,一旦你的数据超过了10W或者更大的时候,恭喜你你可以和喝几杯咖啡了。
关于rand函数在mysql手册上是这么写的
在ORDER BY语句中,不能使用一个带有RAND()值的列,原因是 ORDER BY 会计算列的多重时间。
官方都建议不要在order by中使用rand函数了,我还能说什么?具体的性能测试有很多人写过这方面的文章,具体可以看这里 。
他们也做过很多了测试,当然我也是按照我自己的数据量进行测试,我个人非常喜欢这条语句,算是他们两篇文章的总结吧,要想快速获取随机文章就用这条sql语句。
SELECT * FROM `tbl` AS a JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `tbl`)-(SELECT MIN(id) FROM `tbl`))+(SELECT MIN(id) FROM `tbl`)) AS id) AS b WHERE a.id >= b.id ORDER BY a.id LIMIT 5;
ps:也可以在程序中进行设置随机码。我之前是这么处理的。
//伪代码 $limit =5;//显示条数 $count = "select count(*) from table"; $start = mt_rand ( 0, $count - $limit ); $list = "select * from table limit ".$start.",".$limit;
这个生成出来的其实和上面使用sql语句效果是一样的。我个人建议还是使用程序来处理比较好。