当前位置: 首页 > news >正文

MySQL随机获取记录之方法(The Method of Randomly Obtaining Records in MySQL)

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

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

方法一:使用 ORDER BY RAND()

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

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

图片

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

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

这种方法利用主键范围来实现随机获取记录,避免了全表扫描:T * FROM testdb.test_tb1 WHERE id >= (SELECT id FROM (SELECT id FROM testdb.test_tb1 ORDER BY RAND() LIMIT 1) AS t)LIMIT 1;

图片

方法三:使用JOIN及RAND()

SELECT * FROM testdb.test_tb1 AS t1JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM testdb.test_tb1)) AS id) AS t2WHERE t1.id >= t2.idORDER BY t1.idLIMIT 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() 方法,简单直接。

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

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

相关文章:

  • 【python3】关于等额本金和等额本息计算
  • Activiti(二)- 基于SpringBoot开发配置activiti相关配置项
  • 深入理解C++面向对象特性之一 多态
  • Linux驱动开发进阶(六)- 多线程与并发
  • Redis到底能不能做主数据库?
  • xv6-labs-2024 lab1
  • QML面试笔记--UI设计篇03导航控件
  • 国内数据安全传送简述
  • python 微信小程序支付、查询、退款使用wechatpy库
  • 神经探针与价值蓝海:AI重构需求挖掘的认知拓扑学
  • 深度学习 Deep Learning 第19章 近似推理
  • 基于SpringBoot的在线拍卖系统(源码+数据库+万字文档+ppt)
  • 【LeetCode 题解】算法:34.在排序数组中查找元素的第一个和最后一个位置
  • Kafka 中的 offset 提交问题
  • Qt 资源文件(.qrc 文件)
  • 基于SpringBoot的“高校社团管理系统”的设计与实现(源码+数据库+文档+PPT)
  • 基于ensp的mpls的解决bgp域内黑洞及MPLS VPN的应用
  • 心脏滴血漏洞(CVE-2014-0160)漏洞复现
  • 探秘PythonJSON解析深度剖析json.loads处理嵌套JSON字符串的奥秘
  • 《UNIX网络编程卷1:套接字联网API》第3章 套接字编程简介
  • 成都警方通报:8岁男孩落水父母下水施救,父亲遇难
  • 外交部:正确认识和对待历史是检验日本能否恪守和平发展承诺的重要标准
  • 广州一饮品店取名“警茶”?市监局:取名没问题,但图像会产生误解
  • 线下哪些商家支持无理由退货?查询方法公布
  • 济南市委副秘书长吕英伟已任历下区领导
  • 北京“准80后”干部兰天跨省份调任新疆生态环境厅副厅长