Yinchiang | 0
为了保证数据足够多,请使用快速插入数据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语句效果是一样的。我个人建议还是使用程序来处理比较好。
发表评论电子邮件地址不会被公开。 必填项已用*标注
评论
姓名 *
电子邮件 *
站点
评论审核已启用。您的评论可能需要一段时间后才能被显示。
————————————————
版权声明:本文为CSDN博主「小圆圆伍」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_33910191/article/details/113645783