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

相关推荐

  1. MySQL随机获取记录

    2024-04-22 15:38:05       28 阅读
  2. SQLITE如何同时查询出第一和最后记录

    2024-04-22 15:38:05       36 阅读
  3. mysql 分组后每个取最新的记录

    2024-04-22 15:38:05       10 阅读
  4. MySQL更新语句是怎么执行的?

    2024-04-22 15:38:05       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-22 15:38:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-22 15:38:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-22 15:38:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-22 15:38:05       18 阅读

热门阅读

  1. node.js常用指令

    2024-04-22 15:38:05       13 阅读
  2. 美国基金会注册

    2024-04-22 15:38:05       15 阅读
  3. AUTOSAR OS Alarm讲解

    2024-04-22 15:38:05       16 阅读
  4. CentOS常见命令

    2024-04-22 15:38:05       13 阅读
  5. MySQL--数据的增删改

    2024-04-22 15:38:05       15 阅读
  6. Qt的坐标转换

    2024-04-22 15:38:05       13 阅读
  7. 【Flutter】序列化方案之命令行生成model

    2024-04-22 15:38:05       17 阅读
  8. 【shell】变量和引号!

    2024-04-22 15:38:05       12 阅读
  9. MATLAB中Simulink.defaultModelTemplate用法

    2024-04-22 15:38:05       18 阅读