`
tangwenchao86
  • 浏览: 374199 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

mysql随机获取记录

阅读更多
MYSQL的随机抽取实现方法。举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是:SELECT * FROM tablename ORDER BY RAND() LIMIT 1
但是,后来我查了一下MYSQL的官方手册,里面针对RAND()的提示大概意思就是,在ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描。但是在MYSQL 3.23版本中,仍然可以通过ORDER BY RAND()来实现随机。

但是真正测试一下才发现这样效率非常低。一个100万余条的库,查询1条数据,居然要4秒以上。查看官方手册,也说rand()放在ORDER BY 子句中会被执行多次,自然效率及很低。
You cannot use a column with RAND() values in an ORDER BY clause, because ORDER BY would evaluate the column multiple times.
搜索Google,网上基本上都是查询max(id) * rand()来随机获取数据。

select * from instanceprice_attach where id <= (SELECT FLOOR(RAND() * (SELECT MAX(ID) FROM INSTANCEPRICE_ATTACH))) order by id limit 1
这样大概95ms。

原来写的是>=,一直是id最大的那条记录。

有人这样处理取得重复记录:
SELECT t1.*
FROM tablename AS t1 JOIN
(SELECT ROUND(RAND() * ((SELECT MAX(id) FROM tablename )-(SELECT MIN(id) FROM tablename ))+
(SELECT MIN(id) FROM tablename)) AS id) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id LIMIT 1;


SELECT * FROM tablename 
WHERE id >= (SELECT floor( RAND() * ((SELECT MAX(id) FROM tablename )-
(SELECT MIN(id) FROM tablename )) + (SELECT MIN(id) FROM tablename )))
ORDER BY id LIMIT 1;

大概都是90多毫秒,网上说第一种写法会快一点,但是我测试貌似没什么区别。
分享到:
评论

相关推荐

    PHP实现在数据库百万条数据中随机获取20条记录的方法

    本文实例讲述了PHP实现在数据库百万条数据中随机获取20条记录的方法。分享给大家供大家参考,具体如下: 额,为什么要写这个? 在去某个公司面试时,让写个算法出来,当时就蒙了,我开发过程中用到算法的吗?又不是...

    php随机取mysql记录方法小结

    在php中要随机取mysql记录我们可以直接使用mysql_query来执行mysql中的select rand函数获取的数据并读出来,这里就来给大家简单介绍一下. 方法一,代码如下: 复制代码 代码如下:select * from tablename order by rand...

    MySql分组后随机获取每组一条数据的操作

    思路:先随机排序然后再分组就好了。 1、创建表: CREATE TABLE `xdx_test` ( `id` int(11) NOT NULL, `name` varchar(255) DEFAULT NULL, `class` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=...

    mysql优化取随机数据慢的方法

    MySQL很多时候需要获取随机数据,举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是: 代码如下:SELECT * FROM tablename ORDER BY RAND() LIMIT 1 但是,后来我查了一下MYSQL的官方手册,里面针对...

    在线考试系统在线判题系统前端 html + css + js 后端 python + flask +mysql

    在线答题 (在线答题通过管理员后台,随机获取题库中的5个题库数据,最后显示到在线答题页面,然后开始做题) 答题记录 数据库设计(OnlineJudgeSystem) Admins(管理员) Id User_Name PWD Students(用户学生...

    在线考试系统在线判题系统框架:前端 html + css + js 后端 python + flask +mysql

    在线答题 (在线答题通过管理员后台,随机获取题库中的5个题库数据,最后显示到在线答题页面,然后开始做题) 答题记录 数据库设计(OnlineJudgeSystem) Admins(管理员) Id User_Name PWD Students(用户学生...

    MySql基本查询、连接查询、子查询、正则表达查询讲解

    查询数据是指从数据库中的数据表或视图中获取所需要的数据,在mysql中,可以使用SELECT语句来查询数据。根据查询条件的不同,数据库系统会找到不同的数据。 SELECT语句的基本语法格式如下: [sql] view plain copy ...

    mysql数据库查询优化 mysql效率第1/3页

    MySQL由于它本身的小巧和操作的高效, 在数据库应用中越来越多的被采用.我在开发一个P2P应用的时候曾经使用MySQL来保存P2P节点,由于P2P的应用中,结点数动辄上万个,而且节点... 随机的获取记录 3. 使用连接池管理连接.

    提高MySQL 查询效率的三个技巧第1/2页

    MySQL由于它本身的小巧和操作的高效, 在数据库应用中越来越多的被采用.我在开发一个P2P应用的时候曾经使用MySQL来保存P2P节点,由于P2P的应用中,结点数动辄上万个,而且节点... 随机的获取记录 3. 使用连接池管理连接.

    基于SSM+mysql的四六级在线考试系统设计与实现(源码+设计文档+部署说明+视频演示).zip

    实时更新:系统支持实时更新题库和学生成绩记录,学生可以及时获取最新的考试题目和成绩信息,提高信息的准确性和及时性。 安全性和隐私保护:系统采用安全措施,保护学生个人信息的安全和隐私,确保数据的保密性和...

    PHP经典100例.

    34获取数组中的元素 35创建一个多维数组 36PHP 4.0实现表格状打印 37实现背景颜色的改变 38文件上传 39查看PHP的环境变量 40使用文件包含 41打开本地或者远程文件 42读取文件内容 43访问文件常见属性 44调用文本文件...

    在线作业管理系统eclipse工程

    学生可以根据教师布置的作业随机获取一道题目,下载作业题目,完成之后上传答案,并且支持多次提交,系统自动记录提交时间,待教师评阅完成之后可以查看成绩和评语,并且随时浏览自己的作业情况。管理员主要是对教师...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例077 跳过数据输出中指定的记录 111 实例078 执行指定次数的循环 112 2.7 自定义函数 113 实例079 自定义函数截取中文字符串 113 实例080 公告标题的截取 114 实例081 论坛内容的简短输出 116 实例082 自定义函数...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例077 跳过数据输出中指定的记录 111 实例078 执行指定次数的循环 112 2.7 自定义函数 113 实例079 自定义函数截取中文字符串 113 实例080 公告标题的截取 114 实例081 论坛内容的简短输出 116 实例082 自定义函数...

    PHP程序开发范例宝典III

    实例215 显示数据表中的重复记录和记录条数 335 8.8 排序、分组统计 336 实例216 对数据进行降序查询 336 实例217 对数据进行多条件排序 337 实例218 对统计结果进行排序 338 实例219 单列数据分组统计 ...

    Android手机记录模拟屏幕点击脚本,可用于刷明日方舟等游戏刷本tap_recorder.zip

    这个C#实现的小游戏是一个简单的猜数字游戏,让玩家猜一个1到100之间的随机生成的数字。以下是对这个小游戏的分析: Random 类的使用:游戏开始时,使用 Random 类生成一个1到100之间的随机数作为要猜的数字。 ...

    brookpanel:brook流控面板

    #暂停使用 brook出现断流情况 暂不维护brookpanel_lpbrookpanel_lp基于Beego。开发的Brook流控Web面板体验Web...配置mysql(通过步骤1获取信息)5.2.配置redis(通过步骤2获取信息)5.3.配置remote(随机输入即可)5.4.配置re

    PHP+Ajax网站开发典型实例

    实例15 随机提取文件行 实例16 获得磁盘剩余空间 实例17 搜索文件或文件夹 实例18 文件下载 实例19 文件上传 实例20 网页计数器 实例21 超级链接计数 第3章 数据库、XML实例 实例22 mysql类库完成MySQL...

    AHRID-黑客攻击画像分析系统.zip

    当攻击者访问到部署了AHRID接口的页面,即触发JSONP探针获取攻击者已登录状态下的登录信息,回传登录信息+IP+UA,后端会对IP进行物理地址转换,最终将数据记录到数据库。 数据库结构 表:Admin - 列:id,...

Global site tag (gtag.js) - Google Analytics