有充分记录如何retrieve one record quickly或如何低效地检索多个记录(通过提取所有ID)。我想知道从数百万条记录表中检索N条记录的最快方法是什么。
我发现有一个3M行MariaDB表,所有ID需要10秒以上,而rand()的订购需要一分钟。这使得我认为N个单独的随机偏移调用(在找到总表数之后)可以更快,假设N相对较低。我仍然想知道是否有更快的方法,或者如果没有,可以在单个查询中进行随机偏移调用。
答案 0 :(得分:1)
我最近正在阅读和思考这个问题!我遇到的最好的解决方案是在http://explainextended.com/2009/03/01/selecting-random-rows/给出的一个:创建一个随机函数,可以逐行迭代地沿着该查询的行应用于页面(对于n = 10):
SELECT rnd_id, rnd_value
FROM (
SELECT @cnt := COUNT(*) + 1,
@lim := 10
FROM t_random_innodb
) vars
STRAIGHT_JOIN
(
SELECT r.*,
@lim := @lim - 1
FROM t_random_innodb r
WHERE (@cnt := @cnt - 1)
AND RAND() < @lim / @cnt
) i
请注意,如果您有其他条件,则不能使用此方法 - 事实上,我认为在这种情况下解决它的方法并不是特别有效,同时可靠地获得所需数量的结果。