如何从没有数字主键的表中有效地选择随机行

时间:2013-10-17 09:15:48

标签: mysql mysql5

从包含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的最佳方法,还是可以使用更高效的代码?

1 个答案:

答案 0 :(得分:-1)

如果您只想获得前1000个条目(但您也可以声明偏移量),您应该查看MySql中的Limit

http://dev.mysql.com/doc/refman/5.0/en/select.html