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…

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

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

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…

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 驱动初始化…

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

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

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

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

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

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

最短路问题之Bellman-Ford,SPFA算法,例题 负环

Bellman-Ford算法: Bellman-Ford算法用于解决带有负权边的单源最短路径问题。其基本思想是通过不断地松弛边来逐步求解最短路径。算法的主要步骤如下: 初始化:将源点到各个顶点的距离初始化为无穷大,源点的距离初始化为0。重复更…

IDEA2023版本创建Sping项目无法使用Java8

1. 问题复现 1.1 当前版本2023.3.2 1.2 创建项目时:不存在jdk8选项 提示报错 1.3 原因分析 Spring官方发布Spring Boot 3.0.0 的时候告知了一些情况,Java 17将成为未来的主流版本 2. 如何解决 2.1 替换创建项目的源 我们只知道IDEA页面创建Spring项目…

代码托管基础操作

在待上传代码文件夹中右键,打开Git Bash Here依次输入以下命令: git init(在本地初始化一个代码仓库,具体表现为会在你的文件夹里出现一个隐藏的.git文件夹) git add .(先把代码放到本地的一个缓冲区)添加当前目录下的…

【C++】从零开始认识泛型编程 — 模版

送给大家一句话: 尽管眼下十分艰难,可日后这段经历说不定就会开花结果。总有一天我们都会成为别人的回忆,所以尽力让它美好吧。 – 岩井俊二 \\\ ⱶ˝୧(๑ ⁼̴̀ᐜ⁼̴́๑)૭兯 //// &#…

AI大模型探索之路-训练篇3:大语言模型全景解读

文章目录 前言一、语言模型发展历程1. 第一阶段:统计语言模型(Statistical Language Model, SLM)2. 第二阶段:神经语言模型(Neural Language Model, NLM)3. 第三阶段:预训练语言模型&#xff08…

Python基础知识(二)

🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》 《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 1.输入和输出函数1.1输出函数1.2输入函数 2.常见运算符2.1赋值运算符2.2比较运算符2.3逻辑运算符2.4and逻辑与2.5or逻辑或2.6not逻…

c++二叉树的进阶--二叉搜索树

1. 二叉搜索树的概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 它的左…

Swift-27-类的初始化与销毁

Swift的初始化是一个有大量规则的固定过程。初始化是设置类型实例的操作,包括给每个存储属性初始值,以及一些其他准备工作。完成这个过程后,实例就可以使用了。 简单来讲就是类的构造函数,基本语法如下: 注意&#xff…