Rails应用中的一个特定页面不断在Heroku上引发Error R15 (Memory quota vastly exceeded)
错误。
此页面有多个远程datatables。这些数据表由ajax查询填充,看起来像这样。
User.
find( params[:id] ).
events.
includes(:city,:state,:country).
where("users.name ilike :search or cities.name ilike :search or states.name ilike :search or countries.name ilike :search", search: "%#{params[:search][:value]}%" ).
page(page).per(10)
这些表很大,但是当查询被分页时,我没想到会有多少内存加载。有人向我建议,虽然paginate可能会限制将Events
加载到内存中的次数,但includes
行会加载所有city
,state
和county
记录。
includes
来电?答案 0 :(得分:0)
不是全部,而是与使用外键的用户模型关联的那些。
使用iLike本身在数据库级别进行字符串搜索很重,但如果你真的想进行ilike搜索,我看到的一个优化范围是从所有表中只选择名称列。如果您在日志中注意到,您的查询将为select * from
类型。