Rails以哪种顺序进行数据库查询

在Rails Anurag随机选择n个对象时,我们建议这个答案随机选择n个post,票数> = x

Post.all(:conditions => ["votes >= ?", x], :order => "rand()", :limit => n) 

我担心的是,超过x票的post数量非常多。

数据库将此条件应用于查询的顺序是什么?

可以

  • (a)选择n个投票> x的post,然后将其随机化? 要么
  • (b)选择所有票数> x的post,然后随机选择n个post?
  • (c)其他?

检查开发日志的建议非常有用。

但是,在这种情况下,随机化发生在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的优秀建议。 如果存在问题,则在投票列上添加索引可以提高性能。 情况。

正如Toby已经指出的那样,这纯粹取决于SQL服务器,一切都在查询本身中完成。

但是,我担心你不能获得真正随机化的输出,除非数据库首先获得整个结果集,然后将其随机化。 虽然,你应该检查EXPLAIN结果。

development.log查找生成的查询,应该给你一个线索。