设为首页 加入收藏

TOP

mysql不用rand()函数实现随机读取数据库记录的方法
2011-06-12 21:47:28 来源: 作者: 【 】 浏览:399次 评论:0

mysql教程不用rand()函数实现随机读取数据库教程记录的方法
,以及google了一下相关的文件,发现大家几乎清一色使用 order by rand() 来达到该目的,但是实际上存在非常严重的性能问题。
如果你的数据库里只有几百条,且调用次数又不多的情况下,你爱用啥方法就用啥方法。
但如果你有10万或100万或更多条数据的话,那么每次执行带 order by rand() 的 sql 语句的时候,mysql服务器需要计算出10万或100万或更多个随机数,可想而知对数据库服务器的资源浪费有多大。

我建议大家使用以下方法之一:

第一种:count + limit

    1、select count(*) from table_name // 获取到数据库总记录 $count
    2、$randoffset = rand(0, $count-1);
    3、select * from table_name limit $randoffset,1

第二种:maxid

    1、select max(id) from table_name // 获取数据库主键字段的最大值 $maxid
    2、$randid = rand(0, $maxid);
    3、select * from table_name where id>=$randid limit 1


    如果能确保id是连续的,甚至可以直接算出一组 $randid,然后用 where id in ($randid_1, $randid_2, ...),批量提取数据
    如果id不是连续的,可以使用多算一些随机数,然后 where id in ($randid_1, $randid_2, ... $randid_100) limit 10,虽然我为了提取10条记录计算了100个随机数,但总比用 order by rand() 需要算几万几十万几百万个随机数划算的多吧。

您看到此篇文章时的感受是:
Tags: 责任编辑:administrator
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到QQ空间
分享到: 
上一篇关于c#中多种连接mysql数据方法 下一篇PhpMyAdmin 导入sql文件失败的解..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

相关栏目

最新文章

图片主题

热门文章

推荐文章

相关文章

广告位