mysql - Rails 按 proc 对集合进行排序

标签 mysql ruby-on-rails ruby

我想使用自定义过程对集合进行排序。我知道 Rails 有 order 方法,但我不相信这适用于 procs,所以我只是使用 sort_by 代替。有人可以详细说明我牺牲的速度,或提出替代方案吗?我的理解是,order 的确切实现将取决于适配器(在我的例子中,是 mysql),但我想知道是否有方法可以利用这一点来加快排序速度。

举个例子,我想这样做:

Model.order(|m| m.get_priority )

但我被迫这样做

Model.all.sort_by{|m| m.get_priority}

最佳答案

sort_by 是在 Ruby 级别实现的,它是 Ruby 的一部分,而不是 ActiveRecord。因此,排序不会由数据库执行,而是由 Ruby 解释器执行。

这不是最佳解决方案,因为 DBMS 通常在对数据进行排序方面更有效,因为它们可能使用现有索引。

如果 get_priority 在数据库外部执行某种计算,那么您在此处发布的代码没有太多替代方案,除非您想缓存 get_priority 的结果 作为 Model 表中的一列,并使用 ActiveRecord order 语句对其进行排序,这将生成 ORDER BY SQL 语句.

关于mysql - Rails 按 proc 对集合进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32104288/

相关文章:

mysql - 将 select 的聚合结果分配给 mySQL 中的用户变量

mysql - sqoop 与 hdfs 命令

ruby-on-rails - 如何在 Rails 2.3 中使用 Rack::URLMap 和 Rack::Cascade 挂载 Resque

ruby-on-rails - 安装包后未加载 Rails 3 Gemfile Gems

ruby-on-rails - Redis 对于 Rails 生产 I18n 来说太慢了吗?

ruby - 解析 'page 1 of x' - 最好的方法(ruby/mechanize/nokogiri)

mysql - 创建表抛出错误

php - 准确保存和显示文本的输入和提交方式

ruby - Ruby 有原子变量吗?

ruby - 随机超时 :Error Exception in Ruby with Mechanize Gem