我有一个由连接组成的查询,输出约30,000多条记录。我想从这些记录中获得10个随机行,而不使用SQL命令ORDER BY rand()。
我尝试遍历记录并将它们放入数组并洗牌(获得洗牌后的前10个)它们,但需要大约8-12秒才能生成。我愿意不惜一切代价缩短处理时间。
我该如何做到这一点?
如果你不想使用RAND()先快速选择id列然后只选择你想要的10行
- 选择id到$idarray
SELECT id FROM table
- Shuffle和slice $idarray
shuffle($idarray);
$ids=array_slice($idarray,0,10);
- 选择完整的行
$sql="SELECT ... WHERE id IN (".implode(', ', $idarray).")";
编辑:这肯定比使用ORDER BY RAND()快得多!