可能重复:
从mysql中的大表中快速选择随机行
我已经看到使用这样的查询拉取随机行,这对于大型数据集来说效率很低。
SELECT id FROM table ORDER BY RANDOM() LIMIT 1
我还看到了其他各种不适用于 MySQL 的特定于 RDBMS 的解决方案。
我能想到的最好的事情是使用两个查询并做这样的事情。
- 获取表中的行数。MyISAM 表存储行数,因此速度非常快。
- 计算 0 和 rowcount - 1 之间的随机数。
- 选择按主键排序的行,LIMIT randnum, 1
这是SQL:
SELECT COUNT(*) FROM table;
SELECT id FROM table LIMIT randnum, 1;
有没有人有更好的主意?