2023高效的mysql 随机语句 200万数据为例 用了 0.0030秒
是的,如果数据表中有200万条记录,使用 ORDER BY RAND() 这种方式来随机选择记录会非常慢,因为 MySQL 需要对整个表进行排序,然后再返回指定数量的记录。这个过程需要消耗大量的时间和资源。
为了提高效率,可以考虑使用其他方法来实现随机选择记录。以下是一些常用的方法:
使用
WHERE子句限制记录数量,然后再使用ORDER BY RAND()进行随机排序。例如:SELECT * FROM table_name WHERE id >= RAND() * (SELECT MAX(id) FROM table_name) LIMIT 10;
这个语句会先计算出一个随机的
id值,然后选择id大于等于这个值的记录,并按照随机顺序返回前10条记录。使用
LIMIT子句和OFFSET子句来分页查询记录,然后随机选择其中的一页。例如:SELECT * FROM table_name LIMIT 1000000, 10000;
这个语句会选择从第1000000条记录开始的10000条记录,并按照默认顺序返回。然后可以在这10000条记录中随机选择指定数量的记录。
使用
HASH函数来生成随机数,然后根据这个随机数选择记录。例如:SELECT * FROM table_name WHERE MOD(CONV(SUBSTRING(MD5(CONCAT(id, RAND())), 1, 16), 16, 10), 100) = 0 LIMIT 10;
这个语句会先将每条记录的
id和一个随机数拼接起来,然后计算出一个MD5值,并取这个值的前16个字符。然后将这个字符串转换成一个10进制数,并对100取模,得到一个0到99之间的随机数。最后,选择这个随机数等于0的记录,并返回前10条记录。
以上是一些常用的方法,可以根据实际情况选择合适的方法来实现随机选择记录。
除了上述提到的方法,还有一些其他的方法可以实现高效的随机选择记录。以下是一些常用的方法:
使用
JOIN子句和RAND()函数来随机选择记录。例如:SELECT t1.* FROM table_name t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM table_name)) AS id) AS t2 WHERE t1.id >= t2.id ORDER BY t1.id ASC LIMIT 10;
这个语句会先计算出一个随机的
id值,然后选择id大于等于这个值的记录,并按照id升序排序。最后返回前10条记录。使用
UNION子句和RAND()函数来随机选择记录。例如:(SELECT * FROM table_name WHERE id >= RAND() * (SELECT MAX(id) FROM table_name) ORDER BY id ASC LIMIT 10) UNION (SELECT * FROM table_name WHERE id < RAND() * (SELECT MAX(id) FROM table_name) ORDER BY id DESC LIMIT 10);
这个语句会先计算出一个随机的
id值,然后选择id大于等于这个值的记录,并按照id升序排序,返回前10条记录。然后选择id小于这个值的记录,并按照id降序排序,返回前10条记录。最后将这两个结果合并起来,返回20条记录。使用
SUBSTRING_INDEX函数和RAND()函数来随机选择记录。例如:SELECT * FROM table_name WHERE id >= SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(RAND(), RAND(), RAND()), '.', 2), '.', -1) * (SELECT MAX(id) FROM table_name) ORDER BY id ASC LIMIT 10;
这个语句会先生成一个随机的小数值,然后选择
id大于等于这个值的记录,并按照id升序排序,返回前10条记录。
以上是一些常用的方法,可以根据实际情况选择合适的方法来实现随机选择记录。需要注意的是,这些方法都有一定的局限性,可能不适用于所有情况。在实际应用中,需要根据具体的需求和数据量来选择合适的方法。
2023高效的mysql 随机语句 200万数据为例 用了 0.0030秒的更多相关文章
- **高效的MySql 随机读取数据
一直以为mysql随机查询几条数据,就用 SELECT * FROM `table` ORDER BYRAND() LIMIT 5 就可以了. 但是真正测试一下才发现这样效率非常低.一个15万余条的库 ...
- mysql随机取出n条数据
SELECT * FROM tableName ORDER BY RAND() LIMIT n 数据量小的话还可以, 数据量大起来了, 就影响性能了. $rubbish = (new ...
- MySQL select语句直接导出数据
select * into outfile '文件存放路径' from 表名; (先记下来,还未测试)
- MYSQL 随机选取几条数据
SELECT * FROM tablename AS r1 JOIN (SELECT ROUND(RAND() *(SELECT MAX(id)FROM tablename)) AS id) AS r ...
- Mysql 随机查询10条数据效率最快的查询方法
1)使用join 和 rand() 耗时 0.009 SELECT * FROM `t_topic` AS t1 JOIN ( SELECT ROUND( RAND() * ( (SELECT MAX ...
- 转: 从Mysql某一表中随机读取n条数据的SQL查询语句
若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机 ...
- 从Mysql某一表中随机读取n条数据的SQL查询语句
若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机 ...
- mysql随机查询记录的高效率方法
mysql使用rand随机查询记录的高效率方法 一直以为mysql随机查询几条数据,就用 SELECT * FROM `table` ORDER BY RAND() LIMIT 5 就可以了. 但是真 ...
- 如何实现MySQL随机查询数据与MySQL随机更新数据?
以下的文章主要介绍的是MySQL随机选取数据,对实现MySQ随机查询数据与MySQ随机更新数据的实际操作步骤的描述,以及对其实际操作中所要用到的语句的描述,以下就是对其具体操作步骤的描述. MySQL ...
- mysql 随机查询 记录集
有时候需求需要随机从数据库查询若干条记录集,网上搜了一下,几篇博文都是些重复的.....不知道他们谁抄的谁的,这里除了介绍提供一种笔者自己想到的方法,本质都是利用mysql 的rand() 第一种方法 ...
随机推荐
- SQL Server 手工 锁表、查询被锁表、解锁相关语句
SQL Server 手工 锁表.查询被锁表.解锁相关语句 --锁表(其它事务不能读.更新.删除) BEGIN TRAN SELECT * FROM <表名> WITH(TABLOCKX) ...
- c/s winForm框架 tabpage标签切换窗体
/// <summary> /// 根据窗体Name打开窗体 /// </summary> /// <param name="name">< ...
- VMware虚拟机中Ubuntu18.04无法连接网络的有效解决办法
对VMware虚拟机进行恢复默认网络设置 恢复虚拟网络默认设置(在断网状态下): 1)Ubuntu网络设置自动获取IP 依次单击[System Settings]–>[Network]–> ...
- PCB封装设计建议:
1,通孔型元器件建议孔直径比元器件管脚直径大0.2-0.3mm左右,焊盘铜皮外沿一般是0.3-1mm(相当于直径应该加0.6-2mm)宽大元件可再大一点,对于设计单面板的,则最小铜皮外沿应大于1mm以 ...
- Lucene搜索引擎-搜索
Lucene搜索引擎-搜索 常用的Query: BooleanQuery:多个条件组合查询,注意 new BooleanQuery().add(Query, BooleanClause.Occur); ...
- laravel groupBy 分页
$model=DB::table('tablebname') ->where(function($query) use ($res){ $query->where('xx','xx'); ...
- c# 递归应用 完成js文件自动引用
背景: 两张表,分别是 :sys_tbl,和 sys_field,其中:sys_tbl 是系统所有表的信息,包含两个字段 :code(表名),name(表描述信息):sys_fld 是记录第张表中的字 ...
- Spring--AOP通知类型
AOP通知类型 前置通知 通知类中的数据在原始数据的前面 后置通知 通知类中的数据在原始数据的后面 环绕通知 若是只是加一个注解: 我们需要这样做:加一个参数: 若是面对有返回值的方法,又有一点不同之 ...
- wx.BoxSizer布局管理器用法,及其Add()方法参数说明
wx.BoxSizer 布局管理器是一种常见的布局管理器,它可以在水平或垂直方向上布置子窗口部件.同时,它还可以在水平或垂直方向上包含其他 wx.BoxSizer 来创建复杂的布局. 下面是 wx.B ...
- 【绘制分形图案】多重收缩打印机(MRCM)举例
note 2020-08-05搬运 下面的内容来自我的CSDN博客 多重收缩打印机(MRCM)是生成分形图案的一种方法.主要思想还是多次迭代. 每次都是将上一次的输出拿来做线性仿射变换后重新组合在 ...