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() 第一种方法 ...
随机推荐
- 求小于N的最大素数
问题 求小于N的最大素数 分析 枚举:从可能的集合中一一列举各元素 枚举过程中需要考虑的问题: 给出解空间 减少搜索的空间 采用合适的搜索顺序 枚举关键字(枚举核心):减少规模 代码实现 1 impo ...
- 用户输入URL回车到页面呈现之间发生的具体步骤
这个过程中涉及到负责管理的浏览器进程.负责网络请求的网络进程和负责页面渲染的渲染进程 渲染过程这里先不进行具体描述,后续会单独整理 整体步骤 前提,当前页面的卸载事件和收集需要释放的内存 第一步,浏览 ...
- LeetCode刷题4:寻找两个正序数组的中位数
题目: 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2.请你找出并返回这两个正序数组的 中位数 . 算法的时间复杂度应该为 O(log (m+n)) . 来源:力扣 ...
- wrangler 13 mwz 脱浆记录
100度水泡了1个小时,一点没缩 70度水泡了3个小时,一点没缩 随后绝望,放洗衣机里洗了20min,缩了2cm 想再接再厉,放洗衣机30min,没缩 放外面晾干,看晾干以后多长吧 --------- ...
- sql server数据库的带返回值的存储和函数的基础使用
准备基本的数据 create table test_table ( id int identity(0,1), name varchar(20), age int, book_name varchar ...
- input number类型去掉箭头和禁用滚轮
input number类型可以输入整型.浮点型.科学计数法的数据 禁用滚轮,在input标签内添加onmouseWheel="return false" <input ty ...
- redhat安装mysql8.0
redhat 安装mysql 8.0 * 看mysql官方文档 * 安装epel源 * 安装mysql源 参考文章 redhat7通过yum安装mysql5.7.17教程:https://www.jb ...
- python 修改excel文件内容(修改excel文件日期每天保存一份)
import xlrd import xlwt from xlutils.copy import copy import time import datetime def setStyle(name, ...
- web目录扫描工具
在对Web网站进行审计时,首先我们会对进场出现的/admin和robots.txt等信息和目录进行初步的审计获取重要的信息,但是手动猜测目录过于缓慢,使用工具能够迅速的爆破出目录 目录爆破取决于字典的 ...
- Javaweb基础复习------JSON相关知识
JSON(JavaScript对象表示法) 首先,我们需要知道的是,要使用json语法的话,就需要在Maven项目中导入相关的包,可以参考我之前发过的那个Maven导包那个网址,在里面找到这个页面: ...