ruby-on-rails - 从具有 500k 条记录的模型中快速对记录进行排序

标签 ruby-on-rails ruby-on-rails-3 sqlite activerecord database-performance

我正在尝试对包含 500k 行的模型中的记录进行排序。当我最初尝试此过程时,我只有 200 条记录,并使用以下代码并提取记录 1-5 来列出最受欢迎的记录:

@mostpopular = Product.find(:all, :order => 'click_count DESC')

但是,现在我有一个更大的数据集,这使我的计算机停止运行,我希望尝试以更有效的方式完成搜索。

我尝试将代码调整为 @mostpopular = Product.order('click_count DESC').limit(10) 但这仍然需要很长时间才能完成...

是否有更有效的方法从大型数据集中提取前 10 条最受欢迎的记录?

感谢您的宝贵时间

最佳答案

答案很可能不在 Rails 中,而是在您的数据库中。

将查询写入日志,以便您可以看到正在执行什么查询:

logger.debug Product.find(:all, :order => 'click_count DESC').limit(10).to_sql

一旦您掌握了 SQL,请转到数据库控制台并要求它向您显示该查询的查询计划和统计信息。你没有说你正在使用什么数据库,但在 postgresql 中,你会使用 EXPLAIN 命令。我会让您看到正在完成行扫描(也称为序列扫描)。

您可能会发现 click_count 缺少索引,添加它可以解决您的问题。

关于ruby-on-rails - 从具有 500k 条记录的模型中快速对记录进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16374338/

相关文章:

javascript - Rails 4/UJS - ActionController::UnknownFormat - 为用户提供一种直接打开已打开模式的页面的方法

ruby-on-rails - 如何使用 rspec 在 Controller 中测试自定义路由

ruby-on-rails - 在 Rails 中将记录转换为 JSON 时包括模型的虚拟属性

javascript - 无法使用 SQLite 在 ionic1 中创建多个表

Android Cursor 最大尺寸

Android SQLite 不会向数据库添加值

ruby-on-rails - Rails Active Storage - 背景图像无效属性?

ruby-on-rails - Rails - 检查数组中的任何对象是否为 ActiveRecord 实例

ruby-on-rails - 使用单表继承处理表单

ruby-on-rails - attr_accessible 在 Rails 中如何工作?