我有一个分散在多个服务器上的分片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
更好,并且想知道是否有人有更好的解决方案可以使用非数字标识符。
答案 0 :(得分:6)
LIMIT 1 OFFSET N
(其中N从0到记录数-1)会更好,从DB服务器传输的记录更少,并且不需要为排序生成随机数据。
此外,一些RMDB可能非常有效地执行该偏移 - 但我不知道MySQL是否会在您的表定义上,您应该测试性能。