我有一个分片的MySQL数据库表,分布在多台服务器上,并希望有一个函数来获取随机记录。
在我看来,最好的方法是:
1. 在(Perl)应用程序层中选择一个随机分片。 2. 从该分片的表中选择一行随机记录。
本问题将重点关注解决方案的第2部分。
我的表没有数字ID,我们决定使用GUID以避免维护票务服务的开销。我们将GUID与分片标识符结合使用,以确保它们是唯一的。
表格大致如下:
到目前为止,我想到的最好的答案是由 Jack 提出的,具体做法如下:
在我看来,最好的方法是:
1. 在(Perl)应用程序层中选择一个随机分片。 2. 从该分片的表中选择一行随机记录。
本问题将重点关注解决方案的第2部分。
我的表没有数字ID,我们决定使用GUID以避免维护票务服务的开销。我们将GUID与分片标识符结合使用,以确保它们是唯一的。
表格大致如下:
guid name details
003-b0470602-a64b-11da-8632-93ebf1c0e05a Aura Some details
到目前为止,我想到的最好的答案是由 Jack 提出的,具体做法如下:
- 计算数据库中记录的数量。
- 获取一个介于 1 和步骤 1 结果之间的随机数。
SELECT * FROM table LIMIT {步骤 2 的结果}
- 从这个(可能非常大的)结果集中取出最后一个结果。
ORDER BY RAND() LIMIT 1
好),并且想知道是否有任何更好的解决方案可以与非数字标识符一起使用。