Return 来自 CockroachDB 中“SELECT”的随机行

Return random rows from `SELECT` in CockroachDB

如何使用 CockroachDB select 来自 SQL table 的随机行?例如,如果我有很多问题,并且我想在每次学生加载它们时生成不同的序列。

CockroachDB 还没有提供一种有效的方法来做到这一点!对于一种非高效的方式,您可以使用 SELECT ... FROM ... ORDER BY random() LIMIT 1;

或者,您可以在应用程序本身中对 SELECT 语句的结果进行混洗。将结果放入数组(或任何其他类似聚合的结构)后,您还可以在那里打乱顺序。

要获得更有效的方法,您可以向每一行添加一个整数列 randomid。插入时在该列中放置一个随机数。然后你可以检索一个随机列:

SELECT ... FROM ... WHERE randomid >= ? ORDER BY randomid LIMIT 1;

在哪里?是一个随机数。

请注意,随机数需要额外的存储空间,并且必须为 randomid 列编制索引。

另请注意,您可能需要 运行 此查询两次(>= 和 <)以确保获得结果。虽然在第一个查询中被删除的概率应该很低。

我正在使用以下语句 select 来自 cockroach 数据库的随机行数。

SELECT ... FROM ... WHERE round(random()*10) % 10 = 0 LIMIT 10