首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从没有数字ID的MySQL数据库表中提取随机行?

问如何从没有数字ID的MySQL数据库表中提取随机行?
EN

Stack Overflow用户
提问于 2014-03-25 11:09:50
回答 1查看 218关注 0票数 5

我有一个分布在多个服务器上的分片MySQL数据库表,并且希望有一个函数来获取随机记录。

在我看来,最好的方法是:

  1. 在(Perl)应用层中选择一个随机碎片。
  2. 从该碎片上的表中随机选择一行。

这个问题将集中在解决方案的第2部分。

我的表没有数字ID,为了避免维护票务服务的开销,我们决定使用GUID。我们将GUID与碎片标识符结合起来,以确保它们是唯一的。

桌子是这样的:

代码语言:javascript
复制
guid                                        name      details
003-b0470602-a64b-11da-8632-93ebf1c0e05a    Aura      Some details

到目前为止,我想出的最好的答案是Jack提出的,它是:

  1. 计算数据库中的记录数。
  2. 在1和步骤1的结果之间得到一个随机数。
  3. SELECT * FROM table LIMIT {result from step 2}
  4. 从这个结果集(可能非常大)获得最后的结果。

我担心涉及到的处理可能相当大(虽然肯定比ORDER BY RAND() LIMIT 1要好,并且想知道是否有人有更好的解决方案来处理非数字标识符。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-25 11:15:29

LIMIT 1 OFFSET N (其中N从0到记录数-1)会更好,减少从DB服务器传输的记录,并且不需要为排序生成随机数据。

此外,一些RMDB可能会非常高效地执行该偏移量--但我不知道MySQL是否会对表定义进行测试,您应该测试性能。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22632766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档