我有一个分散的
MySQL数据库表分布在许多服务器上,并希望有一个函数来获取随机记录.
我看待它的方式,最好的方法是:
>在(Perl)应用程序层中选择随机分片.
>从该分片上的表中选择一个随机行.
这个问题将集中在解决方案的第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更好,并且想知道是否有人有更好的解决方案使用非数字标识符.