mysql实现高效率随机取数据
2024-10-14 21:25:16
从数据库中(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
最新文章
- CRL快速开发框架系列教程六(分布式缓存解决方案)
- java并发控制:lock
- PL/SQL通过存储过程为相同数据添加序号
- Android-Using DDMS
- For循环语句的使用
- EAPOL 协议
- 宝马-中国官方网站服务站点信息爬去记录(解析json中数据)
- c# listview导出excel文件
- 获取webshell的十种方法
- 在Android studio环境下使用EventBus
- [Micropython]TPYBoard v10x拼插编程实验 点亮心形点阵
- 《推荐》安装Photoshop详细步骤 ,手把手,一步一步,具体详细地教你安装Photoshop (Adobe photoshop CS6)
- 华为4K机顶盒EC6108V9U从原联通更换为电信的IPTV账号成功经验
- JetBrains 产品线破解方法
- PAT之气死人不偿命的3n+1猜想
- 从零开始学安全(五)●Vmware虚拟机三种网络模式详解
- nginx LetsEncrypt
- Linux下函数调用堆栈帧的详细解释【转】
- 深入Java内存模型之阅读理解(2)
- [leetcode]Word Search @ Python
热门文章
- if条件语句练习题
- c# xml的增删改查操作 xmlDocument 的用法
- 一道数学题 hduacm 5144
- C#中三种定时器对象的比较
- <;input type=";hidden"; id=";haha"; name=";wang"; value=";xiaodong"; />;
- Exif的Orientation信息说明
- CSS 奇技淫巧十八招
- ASP.NET 学习笔记
- 图解Nosql(hbase)与传统数据库的区别
- javascript预解析和作用域