1

我正在编写一个 rails finder 查询,该查询按每篇文章的最高批准和公开评论数排序文章的记录。

在 Ruby on Rails 中运行此类查询的最佳方式是什么?

作为一般规则,开发人员是否支持内存过滤或运行复杂的 SQL 查询?

4

3 回答 3

7

让数据库完成它的工作总是最好的。只需使用 where 子句/join/等编写查询。并使用 sort by 仅返回您需要的记录。通过返回更多记录然后过滤 rails 中的数据会浪费通过“线路”(数据库和应用程序服务器之间)以及内存的数据量。数据库针对这些事情进行了优化。根据需要在表上使用索引。

另一个类似的帖子: http: //www.mail-archive.com/rubyonrails-talk@googlegroups.com/msg13484.html

于 2011-06-20T22:18:05.767 回答
3

Web 应用程序的慢速部分几乎总是数据库。

  1. 运行复杂的查询会花费您一点时间,但提供的数据将是有意义的,而且不会那么大。

  2. 运行基本查询将使您拥有必须处理的大型数据集。如此大量的数据也可能需要很长时间才能导入。

我会坚持 1 知道您可以优化查询和添加索引。

于 2011-06-20T22:20:56.463 回答
1

几乎总是,您应该使用 SQL 来过滤您的结果集。数据库更注重性能,并且代码中的排序通常会导致 N+x 查询,这会降低性能。

可能会执行您需要的操作的查找器可能是这样的:

Article.where('id in (
                SELECT article_id
                FROM comments
                WHERE approved = ? AND public = ?
                ORDER BY count(article_id) DESC
                LIMIT 10 
              )', true, true)
于 2011-06-20T22:23:31.013 回答