我有一个分布在多个服务器上的分片MySQL数据库表,并且希望有一个函数来获取随机记录。
在我看来,最好的方法是:
这个问题将集中在解决方案的第2部分。
我的表没有数字ID,为了避免维护票务服务的开销,我们决定使用GUID。我们将GUID与碎片标识符结合起来,以确保它们是唯一的。
桌子是这样的:
guid name details
003-b0470602-a64b-11da-8632-93ebf1c0e05a Aura Some details到目前为止,我想出的最好的答案是Jack提出的,它是:
SELECT * FROM table LIMIT {result from step 2}我担心涉及到的处理可能相当大(虽然肯定比ORDER BY RAND() LIMIT 1要好,并且想知道是否有人有更好的解决方案来处理非数字标识符。
发布于 2014-03-25 11:15:29
LIMIT 1 OFFSET N (其中N从0到记录数-1)会更好,减少从DB服务器传输的记录,并且不需要为排序生成随机数据。
此外,一些RMDB可能会非常高效地执行该偏移量--但我不知道MySQL是否会对表定义进行测试,您应该测试性能。
https://stackoverflow.com/questions/22632766
复制相似问题