首页/数据/SQL 速查/RAND / random 随机数与采样
本包目录(311 条)
查询基础33 条连接与子查询40 条聚合与窗口函数54 条
函数速查60 条
变更与事务52 条性能与执行计划72 条

RAND / random 随机数与采样

生成随机数:随机抽样、造测试数据、加盐场景常用;对超大表 ORDER BY RAND() 代价很高,PG 可用 TABLESAMPLE。

SQL 速查数据更新于 2026-10-12

MySQL

MySQL
SELECT RAND();            -- [0,1)
SELECT RAND(42);         -- 固定种子,可复现
-- 随机取 10 行(小表可用)
SELECT * FROM t ORDER BY RAND() LIMIT 10;

PostgreSQL

PostgreSQL
SELECT random();
SELECT setseed(0.42);     -- 会话级种子
SELECT * FROM t TABLESAMPLE SYSTEM (1);   -- 按块采样约 1%
SELECT * FROM t ORDER BY random() LIMIT 10;
范围[0,1) 半开区间
可复现MySQL RAND(seed) 每语句一致;PG setseed 影响会话后续 random()
采样大表用 TABLESAMPLE(PG)或对主键做区间/取模采样

易错点

  • ORDER BY RAND() LIMIT 1 会先给全表每行算随机数再排序,百万行表的这类写法延迟很高
  • 用 RAND() 生成测试数据时注意它每行重算:需要同值请先落变量或临时表,而不是在一个语句里引用两次

数据来源与参考

  • MySQL 8.0 Reference Manual · RAND
  • PostgreSQL Documentation · Mathematical Functions
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌