从没有数字主键的100.000.000 条记录的表中提取 1000行随机行的最有效方法是什么?
使用ORDER BY RAND()被排除在外,因为效率非常低。
环顾我发现的最佳方法如下:
SELECT key FROM (
SELECT @cnt := COUNT( * ) +1, @lim := 1000 FROM table
)vars STRAIGHT_JOIN (
SELECT r . * , @lim := @lim -1
FROM table r
WHERE (
@cnt := @cnt -1
)
AND RAND( ) < @lim / @cnt
)i
这是使用 MySQL 5 的最佳方法还是可以使用更有效的代码?