我们致力于一个MySQL知识的分享网站

  |   本站Feed      

随机获取N条数据库记录的四个方法

2008-12-31 17:57:02  |   才被阅读:2,710 次  |  
分类: MySQL优化设计  |   发布: OurMySQL  |   来源:mlsx.xplore.cn
标签: , ,

我需要从一个数据库表中随机的获取N条数据库,最先想到的办法是两次访问数据库,第一次是获得记录条数M,然后在产生个N随机数Kj(0<=j<N),其中0<=kj<=M.然后获取键值为Kj的记录数。

但是两次查询数据库是其缺点,简单实现方法如下:

$range_result = mysql_query( ” SELECT MAX(id) AS max_id , MIN(id) AS min_id FROM tb_name “);
$range_row = mysql_fetch_object( $range_result );
$random = mt_rand( $range_row->min_id , $range_row->max_id );
$result = mysql_query( ” SELECT * FROM tb_name WHERE id >= $random LIMIT 0,1 “);

于是查阅其手册(MySQL),其中提到用 by () 和limit两结合来获取随机记录。另外google了一下,还发现了其他一些好的方法,特记录下来:

1) 采用官方的方式
select * from tb_name by () limit N

2)采用类似偏移方式
select * from tb_name
where id >= (select floor(max(id) * ()) from tb_name )
by id asc limit N;

3)优化的方式
select *
from tb_name as r1 join
(select round(() *
(select max(id)
from tb_name)) as id2)
as r2
where r1.id >= r2.id2
by r1.id asc
limit N;

上述方法,第一种效率最低,第三种最好。

IT技术博客大学习

↑ 分享IT博客大学习的文章

相关文章

11 Responses to “随机获取N条数据库记录的四个方法”

  1. andy Says:

    第1种最明了


  2. 软件 Says:

    郁闷啊,我的网站因为备案问题,被空间关闭几天,居然被百度K了,哭…


  3. tao2641 Says:

    支持 说的很有道理


  4. 羽绒 Says:

    好久没有来了~~过来看看博主可好


  5. 金玉 Says:

    博主,文章不错。顶!


  6. 学习方法 Says:

    兄弟,感觉你网站速度快了好多啊··哈哈


  7. cialis Says:

    Hello!


  8. 火车 Says:

    火车(www.cn-auto.org)
    【祝】早晨当朝霞舞动着【福】

    【祝】柔曼翅膀将你梦忆【福】

    【祝】轻轻唤醒一丝清新【福】

    【祝】空气一缕快乐阳光【福】,

    【祝】早晨带给你好心情【福】

    【祝】思念你是一种温馨【福】

    【祝】思念是千万个心愿【福】


  9. 问道推广员 Says:

    有点意思。。


  10. tramadol Says:

    Hello!


  11. Heiferlips Says:

    half life of lisinopril 58996 voltaren made 56847 phentermine paris 8-O cheap acetylleucine pills online 24058 miltefosine sale of 41110


Leave a Reply