我正在尝试对包含 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/