在Select n objects randomly with condition in Rails Anurag慷慨提出这个答案随机选择n个帖子,投票数量为> = x
Post.all(:conditions => ["votes >= ?", x], :order => "rand()", :limit => n)
我担心的是,拥有超过x票数的帖子数量非常大。
数据库将此条件应用于查询的顺序是什么?
是吗
答案 0 :(得分:3)
检查开发日志的建议非常有用。
然而,在这种情况下,随机化发生在MySQL端,而不是在Active Record中。为了查看如何在MySQL中运行查询,您可以从日志中复制查询并将其粘贴到您选择的MySQL工具(控制台,GUI,无论如何)中,并在其前面添加“EXPLAIN”。
你应该得到类似的东西:
EXPLAIN SELECT * FROM posts WHERE votes >= 'x' ORDER BY rand() LIMIT n
当我在MySQL中尝试类似的查询时,我被告知:
Select Type: SIMPLE
Using where; Using temporary; Using filesort
然后你应该搜索关于如何优化MySQL查询的一些关于SO的优秀建议。如果存在问题,则在投票列上添加索引可以提高性能。情况。
答案 1 :(得分:1)
正如Toby已经指出的那样,这完全取决于SQL服务器,一切都在查询本身中完成。
但是,我担心你不能获得真正的随机输出,除非数据库首先获得整个结果集,然后将其随机化。虽然,你应该检查EXPLAIN结果。
答案 2 :(得分:0)
在development.log
中查找生成的查询,应该给你一个线索。