在mySql查询中获取随机值

Rol*_*and 1 mysql

我有一个查询,在数据库中选择6个名称.例如

SELECT names FROM users LIMIT 6
Run Code Online (Sandbox Code Playgroud)

现在我希望这个查询在数据库表中选择一个随机的6个名字,这可能吗?如何

Mar*_*ers 7

简单但缓慢的解决方案是:

SELECT names FROM users ORDER BY RAND() LIMIT 6
Run Code Online (Sandbox Code Playgroud)

这使用随机数排序并具有O(n log n)性能.它应该可以运行10000行,但对于较大的表,它将无法很好地扩展.

为了加快速度,你可以看看Quassnoi的文章MySQL:快速选择一些随机行.

SELECT  *
FROM    (
        SELECT  @cnt := COUNT(*) + 1,
                @lim := 6
        FROM    users
        ) vars
STRAIGHT_JOIN
        (
        SELECT  names,
                @lim := @lim - 1
        FROM    users r
        WHERE   (@cnt := @cnt - 1)
                AND RAND() < @lim / @cnt
        ) i
Run Code Online (Sandbox Code Playgroud)

这具有O(n)性能.