mysql高效随机记录_MySQL获取随机记录SQL

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


发表评论

电子邮件地址不会被公开。 必填项已用*标注