MySQL中如何随机获取一条记录

点击上方蓝字关注我

832aaa2c09d6df38d7e8a6cc96f4bad4.png

    随机获取一条记录是在数据库查询中常见的需求,特别在需要展示随机内容或者随机推荐的场景下。在 MySQL 中,有多种方法可以实现随机获取一条记录,每种方法都有其适用的情况和性能特点。在本文中,我们将探讨几种常用的方法,并推荐适合不同情况下的最佳方法。

方法一:使用 ORDER BY RAND()

这是最常见的随机获取一条记录的方法之一:

 
SELECT * FROM testdb.test_tb1 ORDER BY RAND() LIMIT 1;

0805d7e4e4668b2b8a4b7bda2c9ea27f.png

虽然简单直接,但在大数据量下性能较低,因为需要对整个结果集进行排序。

方法二:利用 RAND() 函数和主键范围

这种方法利用主键范围来实现随机获取记录,避免了全表扫描:

 
SELECT * FROM testdb.test_tb1 
WHERE id >= (SELECT id FROM (SELECT id FROM testdb.test_tb1 ORDER BY RAND() LIMIT 1) AS t)
LIMIT 1;

218afed6af646a4cef082864eba09dd8.png

方法三:使用JOIN及RAND()

SELECT * FROM testdb.test_tb1 AS t1
JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM testdb.test_tb1)) AS id) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id
LIMIT 1;

JOIN 和 RAND() 函数可以通过JOIN一个随机生成的ID来获取记录,这种方法比直接使用 ORDER BY RAND() 效率更高。

其他方法:

也可以通过动态SQL的方式进行获取

SET @row_num = FLOOR(RAND() * (SELECT COUNT(*) FROM testdb.test_tb1));
PREPARE STMT FROM 'SELECT * FROM testdb.test_tb1 LIMIT ?, 1';
EXECUTE STMT USING @row_num;
DEALLOCATE PREPARE STMT;

不过如果表比较多,建议表记录数从统计信息中获取

方法选择

  • 对于小表或需求不是十分严格的场景,可以使用 ORDER BY RAND() 方法,简单直接。

  • 对于大表,推荐使用第二种/第三种/第四种方法,通过估算行数或利用主键范围来提高性能。

在选择具体方法时,需要根据实际数据量大小、性能需求以及具体场景来进行权衡和选择。合理选择适合情况的随机获取记录方法,可以有效提高数据库查询效率。

通过以上方法和推荐,可以更好地在 MySQL 数据库中实现随机获取一条记录的功能,满足不同场景下的需求。如果您有任何问题或更多相关需求,欢迎留言讨论。

437f228c004df9a39c41991f8740debe.png

往期精彩回顾

1.  MySQL高可用之MHA集群部署

2.  mysql8.0新增用户及加密规则修改的那些事

3.  比hive快10倍的大数据查询利器-- presto

4.  监控利器出鞘:Prometheus+Grafana监控MySQL、Redis数据库

5.  PostgreSQL主从复制--物理复制

6.  MySQL传统点位复制在线转为GTID模式复制

7.  MySQL敏感数据加密及解密

8.  MySQL数据备份及还原(一)

9.  MySQL数据备份及还原(二)

767030385a0afaf8e064b89c6d8cb0c4.png

扫码关注     

8be933122e2adbd6a55c90dcc2cce01c.jpeg

d351129ef51120b107195bf45801c79a.png

9694be02b54c89c3c63d8b15d0ce8b53.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/3143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新恒盛110kV变电站智能辅助系统综合监控平台+道巡检机器人

江苏晋控装备新恒盛化工有限公司是晋能控股装备制造集团有限公司绝对控股的化工企业,公司位于江苏省新沂市。新恒盛公司40•60搬迁项目在江苏省新沂市经济开发区化工产业集聚区苏化片区建设,总投资为56.64亿元,该项目是晋能控股装备制造集团重…

ios CI/CD 持续集成 组件化专题一 iOS 将图片打包成bundle

一、 创建 选择 macos 下的Bundledle 二 、取名点击下一步 三、Base SDK 选择ios 四 、Build Active Architecture Only 五、Installation后面的内容删除 六、.Skip Install 选择NO 七、Strip Debug Symbols During Copy 中"Release"项设置为 "YES" 八、…

网络基础(1)

文章目录 1. 网络基础1.1 网络协议1.1.1 OSI七层模型 1.3 网络中的地址管理 2. 套接字编程2.1 源IP地址和目的IP地址2.3 socket编程接口2.3.2 sockaddr结构2.2.3 UDPecho服务器2.24 netstat2.25 远程执行命令 1. 网络基础 1.1 网络协议 1.1.1 OSI七层模型 OSI(Op…

偏微分方程算法之二阶双曲型方程紧交替方向隐格式

目录 一、研究对象 二、理论推导 2.1 二维紧差格式 2.2 紧交替方向隐格式

扭蛋机小程序对市场的发展有哪些推动作用?

近几年,扭蛋机发展的非常迅猛。随着二次元文化的火热,给扭蛋机带来了发展机遇,扭蛋机行业也受到了大众的喜爱。扭蛋机的商品种类多样化,包含了各类热门IP周边衍生品、玩具、小商品等,适合所有消费人群,市场…

2024-04-24 问AI: 在深度学习中,CUDA 是什么?

文心一言 在深度学习中,CUDA(Compute Unified Device Architecture)是由NVIDIA公司开发的一种并行计算平台和编程模型。它的主要目的是利用GPU(图形处理单元)的强大计算能力来加速各种计算任务,包括深度学…

2024年G1工业锅炉司炉证考试题库及G1工业锅炉司炉试题解析

题库来源:安全生产模拟考试一点通公众号小程序 2024年G1工业锅炉司炉证考试题库及G1工业锅炉司炉试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局)特种设备作业人员上岗证考试大纲…

8.0MGR单主模式搭建_克隆(clone)插件方式

为了应对事务一致性要求很高的系统对高可用数据库系统的要求,并且增强高可用集群的自管理能力,避免节点故障后的failover需要人工干预或其它辅助工具干预,MySQL5.7新引入了Group Replication,用于搭建更高事务一致性的高可用数据库…

【前端缓存】localStorage是同步还是异步的?为什么?

写在开头 点赞 收藏 学会 首先明确一点,localStorage是同步的 一、首先为什么会有这样的问题 localStorage 是 Web Storage API 的一部分,它提供了一种存储键值对的机制。localStorage 的数据是持久存储在用户的硬盘上的,而不是内存。这意…

.Net添加了引用,仍然提示找不到命名空间

如图,MyStudy控制台程序引用了一个C#类库MyClassLibrary 代码里也能敲出来using MyClassLibrary,但是build时始终提示找不到命名空间MyClassLibrary 我检查了MyClassLibrary的Assembly,命名空间名称无误 又检查了MyStudy里的引用信息&#x…

Vue.js之MVVM设计模式

前言 看到招聘信息网站上有对MVVM框架经验的需求,刚好曾有过这方面的笔记,在复习的同时总结核心知识点分析给大家。 MVVM是可以实现View和Model的完全分离,通过ViewModel这个桥梁进行交互,然后ViewModel通过双向数据绑定把View层和…

Linux SDIO-WiFi 协议栈

Linux SDIO-WiFi 协议栈 1. 简介2. BCMDHD2.1 WiFi模组2.2 驱动初始化(dhd_module_init) 3. Broadcom fullmac WLAN 1. 简介 2. BCMDHD BCMDHD:Broadcom Dongle Host DriverSIP:System In Package 2.1 WiFi模组 2.2 驱动初始化…

web server apache tomcat11-12-SSL/TLS Configuration

前言 整理这个官方翻译的系列,原因是网上大部分的 tomcat 版本比较旧,此版本为 v11 最新的版本。 开源项目 从零手写实现 tomcat minicat 别称【嗅虎】心有猛虎,轻嗅蔷薇。 系列文章 web server apache tomcat11-01-官方文档入门介绍 web…

Java、Tomcat、Apache HTTP Server以及浏览器服务器的关系

一.浏览器服务器有哪些 浏览器服务器是指在互联网上扮演服务器角色的设备或程序,用于响应浏览器发出的请求并向浏览器返回相应的数据。 常见的浏览器服务器有以下几种: Apache HTTP Server:这是世界上最常用的web服务器软件之一,…

spring DisposableBean作用,在spring Bean销毁时的钩子 以及@PreDestroy

DisposableBean 作用 在Spring框架中,DisposableBean是一个接口,它定义了一个单一的方法,用于在Spring容器关闭时或一个由Spring管理的Bean不再需要时执行特定的清理操作。当一个Bean实现了DisposableBean接口,Spring容器会在销毁…

Windows创建类似Linux软连接、Windows软连接、快捷方式

Windows创建软连接 mklink 在 Windows 系统上,可以使用 mklink 命令来创建类似 Linux 的软连接,也称为符号链接。软连接是一种指向另一个文件或目录的链接,它允许您使用不同的名称来访问相同的文件或目录。与快捷方式不同,软连接…

Integer缓存池知道吗?

因为根据实践发现大部分的数据操作都集中在值比较小的范围&#xff0c;因此Integer搞了个缓存池&#xff0c;默认范围是-128到127&#xff0c;可以根据通过设置JVM-XX: AutoBoxCacheMax <size>来修改缓存的最大值&#xff0c;最小值改不了。 实现的原理是int在自动装箱…

IntelliJ IDEA - 10 款 IDEA 宝贝插件,YYDS!

好久没发这种实用贴了&#xff0c;最近用到了一些能提升工作效率的IDEA插件&#xff0c;给小伙伴们分享一下。相信我&#xff0c;我分享的这些插件&#xff0c;都是实实在在能解决实际开发场景中痛处的。 1、POJO to JSON 开发工作中&#xff0c;常常在设计完API后&#xff0c…

【每日算法】理论:深度学习基础 刷题:栈与队列的转换

上期文章 【每日算法】理论&#xff1a;深度学习基础 刷题&#xff1a;KMP算法思想 文章目录 上期文章一、上期问题二、本期理论问题1、RAW图像和RGB图像的区别&#xff1f;2、LSTM模型3、卷积层和池化层有什么区别4、tokenizer 的分词方法有那些&#xff1f;5、10亿个参数的模…

FPGA实现AXI4总线的读写_如何写axi4逻辑

FPGA实现AXI4总线的读写_如何写axi4逻辑 一、AXI4 接口描述 通道信号源信号描述全局信号aclk主机全局时钟aresetn主机全局复位&#xff0c;低有效写通道地址与控制信号通道M_AXI_WR_awid[3:0]主机写地址ID&#xff0c;用来标志一组写信号M_AXI_WR_awaddr[31:0]主机写地址&…