从数据库中(mysql)随机获取几条数据很简单,但是如果一个表的数据基数很大,比如一千万,从一千万中随机产生10条数据,那就相当慢了,如果同时一百个人访问网站,处理这些个进程,对于一般的服务器来说,肯定是要死机的。

mysql数据库获取随机数据的函数rand(),我建议轻易不要用这个,我写博客的时候试了一下,从16万数据里随机获取5条数据,用时14.02秒,这个耗费满惊人的。

SELECT * FROM t_share ORDER BY rand() LIMIT 5;

通过mysql最大值函数max(),最小值min()来减小查询消耗

因为mysql数据的最大值和最小值的获取几乎是0消耗的,数据库表数据与自身主键ID的集合做join查询,是非常快速的。刚我也试了一下,在16万数据的基数下,随机产生5条数据几乎看不到时间消耗的。但是这种查询方法有一个缺点,产生的数据ID都是连续的,如果想不连续,还要做循环执行才行(每循环一次随机1条或2条数据)。

SELECT sh1.* FROM fw_share AS sh1
JOIN
(SELECT
ROUND(
RAND() * ((SELECT MAX(share_id) FROM fw_share)-(SELECT MIN(share_id) FROM fw_share))
+ (SELECT MIN(share_id) FROM fw_share)
) AS share_id
) AS sh2
WHERE sh1.share_id>=sh2.share_id

其实随机产生数据,完全可以让他有根据的随机产生。这怎么讲?比如一篇文章,它有标题、标签、内容,可以提取权重很高的关键词,没篇文章都这么处理,用搜索引擎倒排序的方法,可以快速找到相同关键词的一类文章,然后在这些文章里,随机产生几条数据就是了。把大海捞针的活,变成了在浴池里捞个杂物,从大的范围,缩小到能掌控的范围,万事就变得简单啦!这也是一种思路,找不到很好的解决办法时,可以试试。

转自:http://my.oschina.net/sharephper/blog/100104

最新文章

  1. CRL快速开发框架系列教程六(分布式缓存解决方案)
  2. java并发控制:lock
  3. PL/SQL通过存储过程为相同数据添加序号
  4. Android-Using DDMS
  5. For循环语句的使用
  6. EAPOL 协议
  7. 宝马-中国官方网站服务站点信息爬去记录(解析json中数据)
  8. c# listview导出excel文件
  9. 获取webshell的十种方法
  10. 在Android studio环境下使用EventBus
  11. [Micropython]TPYBoard v10x拼插编程实验 点亮心形点阵
  12. 《推荐》安装Photoshop详细步骤 ,手把手,一步一步,具体详细地教你安装Photoshop (Adobe photoshop CS6)
  13. 华为4K机顶盒EC6108V9U从原联通更换为电信的IPTV账号成功经验
  14. JetBrains 产品线破解方法
  15. PAT之气死人不偿命的3n+1猜想
  16. 从零开始学安全(五)●Vmware虚拟机三种网络模式详解
  17. nginx LetsEncrypt
  18. Linux下函数调用堆栈帧的详细解释【转】
  19. 深入Java内存模型之阅读理解(2)
  20. [leetcode]Word Search @ Python

热门文章

  1. if条件语句练习题
  2. c# xml的增删改查操作 xmlDocument 的用法
  3. 一道数学题 hduacm 5144
  4. C#中三种定时器对象的比较
  5. <input type="hidden" id="haha" name="wang" value="xiaodong" />
  6. Exif的Orientation信息说明
  7. CSS 奇技淫巧十八招
  8. ASP.NET 学习笔记
  9. 图解Nosql(hbase)与传统数据库的区别
  10. javascript预解析和作用域