首页 > 数据库 > mysql教程 > 如何在MySQL中高效地进行简单随机采样?

如何在MySQL中高效地进行简单随机采样?

Patricia Arquette
发布: 2025-01-05 16:03:43
原创
521 人浏览过

How to Efficiently Perform Simple Random Sampling in MySQL?

MySQL 中的高效简单随机采样

许多应用程序需要能够从大型数据库表中提取简单随机样本。然而,对于具有数百万行的表,使用看似直观的方法 SELECT * FROM table ORDER BY RAND() LIMIT 10000 可能会非常慢。

更快的解决方案

更有效的方法是使用 rand() 函数为每一行分配一个随机数,然后基于此过滤表number:

SELECT * FROM table WHERE rand() <= 0.3
登录后复制

工作原理

此方法为每行生成一个 0 到 1 之间的随机数。如果该数字小于或等于 0.3 (30%),则选择该行作为样本。

优点

  • O(n) 复杂度,无需排序
  • 利用 MySQL 内置的 rand() 函数实现高效数字生成

改进版本

为了提高效率,请考虑将行采样到所需样本大小的 2-5 倍,并使用随机数对它们进行排序索引,然后将结果修剪到所需的大小:

SELECT COUNT(*) FROM table; -- Use this to determine rand_low and rand_high

SELECT *
FROM table
WHERE frozen_rand BETWEEN %(rand_low)s AND %(rand_high)s
ORDER BY RAND() LIMIT 1000
登录后复制

此方法使用索引扫描来减小结果的大小排序前的数据,使其适合大型表。

以上是如何在MySQL中高效地进行简单随机采样?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板