从 CockroachDB 中的“SELECT”返回随机行

Posted

技术标签:

【中文标题】从 CockroachDB 中的“SELECT”返回随机行【英文标题】:Return random rows from `SELECT` in CockroachDB 【发布时间】:2017-09-07 09:50:00 【问题描述】:

如何使用 CockroachDB 从 SQL 表中选择随机行?例如,如果我有许多问题,并且我想在学生每次加载它们时生成不同的序列。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

为了更有效的方式,您可以将整数列 randomid 添加到每一行。插入时在该列中放置一个随机数。然后你可以检索一个随机列:

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

在哪里?是一个随机数。

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

另请注意,您可能需要运行此查询两次(>= 和

【讨论】:

【参考方案3】:

我正在使用以下语句从 cockroach db 中选择随机行数。

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

【讨论】:

以上是关于从 CockroachDB 中的“SELECT”返回随机行的主要内容,如果未能解决你的问题,请参考以下文章

在 CockroachDB 中,批处理和事务如何交互?

CockroachDB 中的 DESCRIBE TABLE 等效项?

如何加快 CockroachDB 中的插入性能

CockroachDB 中的自动增量支持

CockroachDB 中的行级锁定

在 CockroachDB 中删除数据库中的所有表