我正在编写一个 rails finder 查询,该查询按每篇文章的最高批准和公开评论数排序文章的记录。
在 Ruby on Rails 中运行此类查询的最佳方式是什么?
作为一般规则,开发人员是否支持内存过滤或运行复杂的 SQL 查询?
我正在编写一个 rails finder 查询,该查询按每篇文章的最高批准和公开评论数排序文章的记录。
在 Ruby on Rails 中运行此类查询的最佳方式是什么?
作为一般规则,开发人员是否支持内存过滤或运行复杂的 SQL 查询?
让数据库完成它的工作总是最好的。只需使用 where 子句/join/等编写查询。并使用 sort by 仅返回您需要的记录。通过返回更多记录然后过滤 rails 中的数据会浪费通过“线路”(数据库和应用程序服务器之间)以及内存的数据量。数据库针对这些事情进行了优化。根据需要在表上使用索引。
另一个类似的帖子: http: //www.mail-archive.com/rubyonrails-talk@googlegroups.com/msg13484.html
Web 应用程序的慢速部分几乎总是数据库。
运行复杂的查询会花费您一点时间,但提供的数据将是有意义的,而且不会那么大。
运行基本查询将使您拥有必须处理的大型数据集。如此大量的数据也可能需要很长时间才能导入。
我会坚持 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)