代码之家  ›  专栏  ›  技术社区  ›  UnkwnTech

更快地随机化mysql服务器或php中的许多结果

  •  6
  • UnkwnTech  · 技术社区  · 15 年前

    在mysql服务器上随机化大型结果集的排序顺序更快还是在我用php接收到数据之后更快?

    是否有人有任何数据可以备份任何一方,甚至是奇闻轶事经验?

    4 回复  |  直到 15 年前
        1
  •  5
  •   Paolo Bergantino    15 年前

    我有经验的猜测是MySQL赢了。这样做是为了处理数据。必须将所有数据移到PHP进行排序的巨大开销使其具有引导的优势。

    当然,你可以通过做一些基准测试来了解自己。

        2
  •  4
  •   Quassnoi    15 年前

    当然你应该穿上它 MySQL 一边。

    但是请注意 ORDER BY RAND() 非常 低效的 MySQL 因为它需要 filesort .

    查看如何选择 10 通过单表扫描有效地随机行:

    SELECT  *
    FROM    (
            SELECT  @cnt := COUNT(*) + 1,
                    @lim := 10
            FROM    t_random
            ) vars
    STRAIGHT_JOIN
            (
            SELECT  r.*,
                    @lim := @lim - 1
            FROM    t_random r
            WHERE   (@cnt := @cnt - 1)
                    AND RAND() < @lim / @cnt
            ) i
    

    有关性能的详细信息,请参阅我的博客中的这篇文章:

    对于一个 1,000,000 记录表,它在不到一秒钟的时间内运行,而不是 15 秒使用 顺序由() .

        3
  •  1
  •   Toby Hede    15 年前

    在mysql中使用rand()将 一定地 快一点。

    要通过PHP随机化,您必须查询数据库并将数据推送到内存中,这样您就有了一个额外的步骤,为排序过程增加了开销。

    在MySQL中,这种类型的查询不会像按索引值排序那样快,但是它仍然是高度优化的。

        4
  •  0
  •   Jeff Ober    15 年前

    注意,使用rand()作为order by语句的对象:

      select * from foo_table order by rand() limit 100