帮助我优化具有太多属性的ActiveRecord对象

Tro*_*ron 1 mysql optimization activerecord ruby-on-rails

我正在开发一个与遗留数据库绑定的应用程序.主要模型基于一个愚蠢的大型100+列表.我不太了解ActiveRecord的内部工作原理,但在我看来,这个模型上的任何请求都在减慢,因为它创建了具有100多个属性的对象.我们称之为SlowModel.

在我的开发计算机上使用此模型渲染页面有时需要17秒.直接查询mysql查询只需要0.5~1秒.

我已经设法通过使用选择字段子集(20左右)的MySQL视图来加速应用程序的一部分.我们称之为QuickModel.使用视图是可以的,但不是最便携的解决方案.

我可能会继续尝试将此QuickModel添加到网站的其他部分,但我想知道是否有人有其他想法加速原始对象.例如,有没有办法在模型中指定activerecord应该忽略哪些列并避免构建?也许有特定的列类型(:text ??)导致ActiveRecord对象膨胀.

假设列具有适当的索引.

Win*_*eld 5

您可以使用ActiveRecord查找的:select选项指定模型查找中返回的列:

SlowModel.all(:select => 'id, col1, col2, col3')
Run Code Online (Sandbox Code Playgroud)

...将加载SlowModel的实例,只填充指定的列.