MySQL 中的高效简单随机采样
许多应用程序需要能够从大型数据库表中提取简单随机样本。然而,对于具有数百万行的表,使用看似直观的方法 SELECT * FROM table ORDER BY RAND() LIMIT 10000 可能会非常慢。
更快的解决方案
更有效的方法是使用 rand() 函数为每一行分配一个随机数,然后基于此过滤表number:
SELECT * FROM table WHERE rand() <= 0.3
工作原理
此方法为每行生成一个 0 到 1 之间的随机数。如果该数字小于或等于 0.3 (30%),则选择该行作为样本。
优点
改进版本
为了提高效率,请考虑将行采样到所需样本大小的 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中文网其他相关文章!