文档章节

如何在MySQL随机选择记录

VictorLi
 VictorLi
发布于 2011/02/16 22:08
字数 248
阅读 1.6K
收藏 1

The easiest way to generate random rows in MySQL is to use the ORDER BY RAND() clause.

SELECT col1 FROM tbl ORDER BY RAND LIMIT 10;

This can work fine for small tables. However, for big table, it will have a serious performance problem as in order to generate the list of random rows, MySQL need to assign random number to each row and then sort them.
Even if you want only 10 random rows from a set of 100k rows, MySQL need to sort all the 100k rows and then, extract only 10 of them.

My solution for this problem, is to use RAND in the WHERE clause and not in the ORDER BY clause. First, you need to calculate the fragment of your desired result set rows number from the total rows in your table. Second, use this fragment in the WHERE clause and ask only for RAND numbers that smallest (or equal) from this fragment.

For example, suppose you have a table with 200K rows and you need only 100 random rows from the table. The fragment of the result set from the total rows is: 100 / 200k = 0.0005.
The query will look like:

SELECT col1 FROM tbl WHERE RAND()<=0.0005;

In order to get exactly 100 row in the result set, we can increase the fragment number a bit and limit the query:
For example:

SELECT col1 FROM tbl WHERE RAND()<=0.0006 limit 100;

本文转载自:http://fwd4.me/vqd

VictorLi
粉丝 21
博文 44
码字总数 15588
作品 0
苏州
技术主管
私信 提问
加载中

评论(0)

MySQL如何选择随机记录?

在本教程中,您将学习从MySQL的数据库表中选择随机记录的各种技术方法。 有时我们需要从表中选择随机记录,例如: 在博客中选择一些随机帖子,并在侧栏中显示。 在“每日报价”窗口小部件中显...

易百教程
2016/10/24
35
0
初次安装Mysql5.7以上版本后初始root密码找不到的问题

mysql5.7新增的特性中主要的一方面就是极大增强了安全性,安装Mysql后默认会为root@localhost用户创建一个随机密码,这个随机密码在不同系统上需要使用不同方式查找,否则无法登录mysql并修改...

科技小能手
2017/11/12
0
0
MySQL快速从60万行中选择10条随机行

如何最好地编写一个查询,从总共60万行中随机选择10行? #1楼 我使用了Riedsio发布的http://jan.kneschke.de/projects/mysql/order-by-rand/ (我使用的是存储过程返回一个或多个随机值的情况...

javail
01/27
62
0
MySQL binlog三种模式及设置方法

MySQL binlog三种模式及设置方法 1.1 Row Level 行模式   日志中会记录每一行数 据被修改的形式,然后在端再对相同的数据进行修改 优点:在模式下,bin-log中可以不记录执行的sql语句的上下...

lyy549745
2018/08/14
53
0
MySQL binlog三种模式

MySQL binlog三种模式 2016-09-21 11:39 1205人阅读 评论(0) 收藏 举报 分类: mysql数据库(10) 目录(?)[+] MySQ binlog三种模式及设置方法 1.1 Row Level 行模式 日志中会记录每一行数据被...

技术小甜
2017/11/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Flume概述及组成

Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并...

长臂猿猴
22分钟前
64
0
将较小的显示器切换到较大的显示器时,有没有办法重新绘制tmux窗口?

假设您使用Terminal.app通过ssh连接到远程服务器。 当您使用较大的分辨率监视器“tmux attach”时,您之前启动了tmux,它会在控制台周围绘制点。 它不适合新的窗口大小。 有没有办法重绘和清...

技术盛宴
30分钟前
34
0
在两个日期之间查找对象MongoDB

我一直在围绕在mongodb中存储推文,每个对象看起来像这样: {"_id" : ObjectId("4c02c58de500fe1be1000005"),"contributors" : null,"text" : "Hello world","user" : { "following......

javail
45分钟前
59
0
《aelf经济和治理白皮书》重磅发布:为DAPP提供治理高效、价值驱动的生态环境

2020年2月17日,aelf正式发布《aelf经济和治理白皮书》,这是aelf继项目白皮书后,在aelf网络经济模型和治理模式方面的权威论述。 《aelf经济和治理白皮书》描述了aelf生态中各个角色及利益的...

AELF开发者社区
56分钟前
53
0
战疫 | 高德工程师如何在3天上线“医护专车”

新冠状病毒肺炎疫情突袭,无数医护人员放弃与家人团聚,明知凶险,仍然奋战在一线。但因为武汉公交、地铁、网约车停运,医护人员上下班很难。白衣天使疾呼打车难。 (截图摘自《财经国家周刊...

amap_tech
今天
55
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部