从包含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的最佳方法,还是可以使用更高效的代码?
答案 0 :(得分:-1)
如果您只想获得前1000个条目(但您也可以声明偏移量),您应该查看MySql中的Limit