1

我有一个由连接组成的查询,输出大约 30,000 多条记录。我想在不使用 SQL 命令 ORDER BY rand() 的情况下从这些记录中获取 10 个随机行。

我尝试遍历记录并将它们放入一个数组并随机播放(在随机播放后获得第一个 10 个),但生成大约需要 8-12 秒。我想不惜一切代价减少这个处理时间。

我将如何做到这一点?

4

1 回答 1

8

好的,如果您不想使用 RAND(),请先快速选择 id 列,然后仅选择您想要的 10 行

  1. 将 ID 选择到 $idarray
    SELECT id FROM table
  2. 洗牌和切片 $idarray
    shuffle($idarray);
    $ids=array_slice($idarray,0,10);
  3. 选择完整的行
    $sql="SELECT ... WHERE id IN (".implode(', ', $idarray).")";

编辑:这肯定比使用 ORDER BY RAND() 快得多!

于 2013-03-15T15:03:19.563 回答