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() 第一种方法 ...
随机推荐
- asp.net页面button按钮防止重复提交的方法
网上找了一些实现方案都不行,就自己写了个用,还行. 先放javascript代码: <script type="text/javascript"> var clicks ...
- String类、StringBuffer类、StringBuilder类
String类.StringBuffer类.StringBuilder类 String类的创建 // 方式一 直接赋值 String s = "woshihaoren"; // 方 ...
- MySQL数据库sql_mode导致varchar字段超过长度被截断插入
django数据库设置sql_mode MySQL的sql_mode解析与设置 mysql中sql_mode的修改 sql_mode:它定义了MySQL应该支持的sql语法,对数据的校验等等. 问题 ...
- Windows查看CUDA版本
桌面右击,查看是否有NVIDIA控制面板 打开控制面板->帮助->系统信息->组件,可以看到CUDA版本
- C++ vector的emplace_back函数
C++ STL的vector相信大家一定都知道,它是一个一般用来当做可变长度列表的类.在C++11之前,一般给vector插入新元素用得都是push_back函数,比如下面这样: std::vecto ...
- MySql创建表遇到的问题
SQL语句如下: CREATE TABLE IF NOT EXISTS `student`{ `id` INT(4) NOT NULL COMMENT '学号', `name` VARCHAR(30) ...
- nhrhrhr
每名学生按规定时间进行答辩,答辩总时间控制在12分钟,其中包括学生报告7分钟.提问以及回答问题5分钟. 1.答辩开始前由答辩委员会组长宣布答辩程序:学生的答辩顺序由教师确定,前一名学生答辩时,下一名答 ...
- 什么是js严格模式?
(use strict)严格模式是一种将更好的错误检查引入代码中的方法. 在使用严格模式时,无法使用隐式声明的变量.将值赋给只读属性或将属性添加到不可扩展的对象等. 1. 严格模式的目的 1) 消除J ...
- java中的4种引用和GC Roots
https://juejin.im/post/5d06de9d51882559ee6f4212?utm_source=gold_browser_extension 1.首先,四种引用如下: Final ...
- Web部署
1.项目配置的理解 IDEA 中最重要的各种设置项,就是这个 Project Structre 了,关乎你的项目运行,缺胳膊少腿都不行.最近公司正好也是用之前自己比较熟悉的IDEA而不是Eclipse ...