我想使用自定义proc对系列进行排序。我知道Rails有订单方法,但我不相信这适用于procs,所以我只是使用sort_by。有人可以详细介绍我牺牲的速度,或建议替代方案吗?我的理解是,顺序的确切实现将取决于适配器(在我的例子中,它是mysql),但我想知道是否有办法利用它来加快排序。
举个例子,我想这样做:
Model.order(|m| m.get_priority )
但我被迫这样做
Model.all.sort_by{|m| m.get_priority}
答案 0 :(得分:3)
sort_by
是在Ruby级别实现的,它是Ruby的一部分,而不是ActiveRecord。因此,数据库不会执行排序,而是由Ruby解释器执行。
这不是最佳解决方案,因为DBMS通常可以更有效地对数据进行排序,因为它们可能会使用现有索引。
如果get_priority
在数据库之外执行某种计算,那么除非您想要缓存get_priority
的结果,否则您不会有很多替代此处发布的代码的替代方法作为Model
表中的一列,并使用ActiveRecord order
语句对其进行排序,该语句将生成ORDER BY
SQL语句。