【问题标题】:Order By Rand() with Where clause使用 Where 子句按 Rand() 排序
【发布时间】:2011-10-26 14:14:01
【问题描述】:

我需要一个更快的替代方法

SELECT * 
    FROM table 
    WHERE cat='catname' 
    ORDER BY RAND() LIMIT 6

【问题讨论】:

    标签: mysql random


    【解决方案1】:

    如果表非常大,在您的应用程序中洗牌可能会很慢。

    这个解决方案怎么样:

    找出表格的大小(多少行)。比,以编程方式找到 0 到 number_of_rows 之间的 6 个随机数。

    搜索行的第二个查询:

    select * from table where id = id1 or id = id2...
    

    【讨论】:

    • 我认为这是正确的想法,尽管您需要在事务中执行此操作,否则数据库的大小可能会在计数查询和选择之间增长
    【解决方案2】:

    更快的方法是不要在查询中使用RAND()。在您的应用程序中随机播放您的结果。

    【讨论】:

    • 比如他有500k行,全选然后在app里洗牌? :)
    • 数据库执行此操作的速度比任何内存代码都快得多。因此,这似乎不是查询的更快替代方案。
    • @Briedis : 他必须以任何方式从 DB 中选择所有 500k
    • @Baszz - 你如何证明这一点?在大多数情况下,没有 rand 的查询是查询的一种更快的替代方法,并且极大地减轻了数据库的负担(mysql 不会将缓存用于 rand 查询)。一般而言,它可能适用于应用程序,也可能不适用 - 这应该在应用程序中进行调试,但它是最简单和最容易实现的替代方案,以首先检查。
    猜你喜欢
    • 2018-07-19
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    • 2013-12-23
    • 2013-09-09
    • 2012-05-31
    • 2016-03-22
    • 1970-01-01
    相关资源
    最近更新 更多