【问题标题】:Mysql "where rand()" performanceMysql "where rand()" 性能
【发布时间】:2015-09-14 21:32:45
【问题描述】:

我正在尝试从我的数据库中随机挑选文章,其中高评分文章被选中的机会更高

SELECT * FROM articles WHERE RAND()>0.9  ORDER BY rating  DESC LIMIT 3

我的问题是: 它会随机整个表格,还是直到找到 3 篇随机数大于 0.9 的文章

【问题讨论】:

  • 它只会选择3篇具有rand() > 0.1的文章。但是你不想要随机记录。您想按等级排序吗?
  • 我知道它会选择 3,但它必须随机整个表吗?在这个查询中,高评分的文章被选中的机会更高,因为前 10 篇有 10%,之后它会下降......

标签: mysql performance random


【解决方案1】:

如果您有 INDEX(rating),则该查询可能在找到 3 行之前获取 3 或 4 (3/(1-0.1)) 行。

但这根本不会给您“高评分文章被选中的更高机会”。它只是为您随机提供 90% 的最高排名行。

这可能会给你你想要的,但需要全表扫描:

SELECT *
    FROM articles
    ORDER BY rating * RAND() DESC
    LIMIT 3;

【讨论】:

  • 我已经纠正了我的错误。这是 0.9 而不是 0.1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-23
  • 2016-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-17
相关资源
最近更新 更多