0

我想提取表格的随机行。使用“ORDER BY RAND”并获取第一行很慢,因为创建了一个单独的表。标准的替代方法是依赖必须是整数的唯一主索引。

但是,如果主键分布不均匀,这不会返回好的结果。此外,它要求我维护一列额外的整数。

4

2 回答 2

1

我在 T-SQL 中使用不均匀分布的键进行了一些随机选择,不需要添加额外的列,方法如下:

  1. 检查表中有多少有效行 ( COUNT(...))
  2. 随机化一个介于 1 和行数之间的数字
  3. 以随机数为索引查询行
于 2012-10-27T21:12:39.833 回答
0

即使您的主键分布不均匀,您仍然可以通过开放式范围查询来确保它们:

SELECT thing FROM table WHERE pk_id > 134 LIMIT 1;

即使没有键为 134 的行,您也会得到链中的下一个。这种方法的好处是它是一个简单的范围扫描并且效率很高。您也不需要知道表中有多少行(例如通过SELECT COUNT(*)...),这在使用 InnoDB 时成本很高 - 您应该使用 InnoDB)。您确实需要执行最大行 ID,但这对于抓取 ( SELECT MAX(pk_id) FROM table) 是有效的并且可以被缓存。

于 2012-10-27T22:01:08.517 回答