sql随机取5条信息
在mysql中查询5条不重复的数据,使用以下:
SELECT * FROM `table` ORDER BY RAND() LIMIT 5
就可以了。但是真正测试一下才发现这样效率非常低。一个15万余条的库,查询5条数据,居然要8秒以上
搜索Google,网上基本上都是查询max(id) * rand()来随机获取数据。
SELECT *
FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM `table`)) AS id) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id ASC LIMIT 5;
但是这样会产生连续的5条记录。解决办法只能是每次查询一条,查询5次。即便如此也值得,因为15万条的表,查询只需要0.01秒不到。
上面的语句采用的是JOIN,mysql的论坛上有人使用
SELECT *
FROM `table`
WHERE id >= (SELECT FLOOR( MAX(id) * RAND()) FROM `table` )
ORDER BY id LIMIT 1;
我测试了一下,需要0.5秒,速度也不错,但是跟上面的语句还是有很大差距。总觉有什么地方不正常。
于是我把语句改写了一下。
SELECT * FROM `table`
WHERE id >= (SELECT floor(RAND() * (SELECT MAX(id) FROM `table`)))
ORDER BY id LIMIT 1;
这下,效率又提高了,查询时间只有0.01秒
最后,再把语句完善一下,加上MIN(id)的判断。我在最开始测试的时候,就是因为没有加上MIN(id)的判断,结果有一半的时间总是查询到表中的前面几行。
完整查询语句是:
SELECT * FROM `table`
WHERE id >= (SELECT floor( RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`)) + (SELECT MIN(id) FROM `table`)))
ORDER BY id LIMIT 1;
SELECT *
FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`))+(SELECT MIN(id) FROM `table`)) AS id) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id LIMIT 1;
最后对这两个语句进行分别查询10次,
前者花费时间 0.147433 秒
后者花费时间 0.015130 秒
看来采用JOIN的语法比直接在WHERE中使用函数效率还要高很多。
sql随机取5条信息相关推荐
- python简单爬虫代码-python爬虫超简单攻略,带你写入门级的爬虫,抓取上万条信息...
原标题:python爬虫超简单攻略,带你写入门级的爬虫,抓取上万条信息 最近经常有人问我,明明看着教程写个爬虫很简单,但是自己上手的时候就麻爪了...那么今天就给刚开始学习爬虫的同学,分享一下怎么一步 ...
- mysql查询结果随机取一个_从SQL查询结果随机取一条数据
最近工作中会涉及复杂的SQL语句,还是挺有意思的.以前想写没有应用场景,现在正好可以多锻炼锻炼.我觉得在实际开发中,程序代码并不是最难的,最难的还是SQL.SQL逻辑性最强,而且还要很清楚表设计,业务 ...
- sql 只取一条记录_后端程序员必备:书写高质量SQL的30条建议
前言 本文将结合实例demo,阐述30条有关于优化SQL的建议,多数是实际开发中总结出来的,希望对大家有帮助. 1.查询SQL尽量不要使用select *,而是select具体字段. 反例子: sel ...
- oracle 取任意一条数据,oracle随机取一条数据详解
Oracle 随机获取N条数据 当我们获取数据时,可能会有这样的需求,即每次从表中获取数据时,是随机获取一定的记录,而不是每次都获取一样的数据,这时我们可以采取Oracle内部一些函数,来达到这样的目 ...
- oracle和sql server取第一条记录的区别以及rownum详解
我们知道学生可能有重名的情况,那么当重名的时候假设只需要取得重名结果集中的第一条记录. sql server:select top(1) num,Name from M_Student where n ...
- thinkphp 随机取10条数据_spark调优-数据倾斜
1.数据倾斜发生时的现象 绝大多数task执行得都非常快,但个别task执行极慢.比如,总共有1000个task,997个task都在1分钟之内执行完了,但是剩余两三个task却要一两个小时.这种情况 ...
- mysql 在结果集中随机_MySql从表结果集中随机取一条数据
博客文章地址:http://blog.csdn.net/macwhirr123/article/details/7489484 Select*from(Select(@rowNo :=@rowNo+1 ...
- mysql随机取5条数据_【转】mysql实现随机获取几条数据的方法
sql语句有几种写法 1:SELECT * FROM tablename ORDER BY RAND() LIMIT 想要获取的数据条数: 2:SELECT *FROM `table` WHERE i ...
- 数据库随机取n条记录
SQL Server SELECT TOP N * FROM 表名 ORDER BY NEWID() My SQL SELECT * FROM 表名 ORDER BY RAND() ...
最新文章
- R语言ggplot2可视化:自定义设置X轴上的时间间隔(中断、以年为单位),使用scale_x_date()自定义设置坐标轴间隔和标签、添加标题、副标题、题注信息
- trycatch抛出异常_Java生鲜电商平台架构中,如何统一异常处理及架构实战
- 【js】vue 2.5.1 源码学习(二) 策略合并
- 在PyCharm下使用Jupyter Notebook
- ASP.net 省市级联(用户控件)适用用framework3.5以上版本
- java数组复制_Java自学-数组 复制数组
- eclipse默认项目部署路径(.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps) 改为自己的tomcat真实路径方法
- 我如何判断漏洞奖励计划是否值得参加?如何获得最大收益?
- php socket 执行,PHP异步调用socket实现代码
- VMware密钥激活
- python2.x 获取网页内容
- 数据库 insert 数据的几种方式
- 云计算是什么?它有哪些形式?
- blp和biba属于哪种访问控制_CISP官方信息安全技术章节练习二
- 魅族路由器(极速版)刷老毛子(padavad)固件-全网最详细教程
- 题目52:输入两个正整数m和n,判断m和n是否互质(即最大公约数为1),是则输出Yes,否则输出No。
- Plantuml类图用法
- HTTP之Chunk
- Distiller 安装时环境配置的一些可选项
- 【UV打印机】电气之光电传感器
热门文章
- 大数据:千万个“路人甲”的价值逻辑
- 准备客串一回Java讲师
- Linux下安装oracle的脚本,linux系统oracle数据安装配置脚本
- 【笔记】LaTeX数学公式
- curl -u “username“ https://api.github.com 转换http请求
- 【FAQ】软件保护系统Themida常见问题集锦(一)—Themida和WinLicense有什么区别?...
- linux负载均衡之关于负载均衡
- 温度 数值模拟 matlab,西安交通大学——温度场数值模拟matlab
- Python爬取微信好友的信息
- TextView 多行文字末尾添加图片