2015-06-28 31 views
0

我想接从我的数据库,其中高评级的制品具有越来越挑Mysql的“其中RAND()”性能比较

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

我的问题的机会较高随机文章是: 请问它随机的整个表,或者只是直到它找到3篇文章是随机的数高于0.9

+0

它只会选择3篇文章有一个'兰特()> 0.1'。但你不想随机记录。你想按评分排序吗? –

+0

我知道它会选择3,但它必须随机整个表? 在该查询中高评价文章有更高的获取摘机机率 因为前10有10%,并在此之后下降... –

回答

0

如果你有INDEX(rating),该查询将可能找到3取前3或4(3 /(1-0.1))行。

但是,这并不会给你“高评级的文章有更高的机会得到挑选”。它只是给你一个随机的90%的排名最高的行。

这可能会给你想要的东西,而是采用了全表扫描:

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

我修复了我的错误。这是0.9而不是0.1 –