,因此可能没有解决此问题的方法,但我想我会问:
我设置了一个PostgreSQL DB。第一张表包含每个具有10个独特球员(A有许多关系)的重播。我想根据我的搜索渲染一个JSON,其中包含与他们的玩家重播。但是,我正在拉大量重播(2000) - 所有这些都有10名球员,这意味着寻找20,000名玩家。
此索引搜索当前是什么样子:
def index
@replays = Replay.where(map_id: params['map_id'].to_i)
@replays = @replays.reverse
render json: @replays[0..2000].to_json(include: [:players])
end
搜索需要很长的时间:
Completed 200 OK in 639596ms (Views: 42.1ms | ActiveRecord: 329252.3ms)
有更好的方法可以搜索和渲染不需要这么长时间的JSON?值得注意的是,仅搜索2K重播,20K播放器,甚至与玩家的单一特定重播仅需几秒钟(第一个搜索本身也只需几秒钟),所以我认为这是一个音量问题。
尝试急切地加载您的重录
replays = Replay.last_two_thousands_by_map_id(params[:map_id])
render json: replays.to_json(include: [:players])
# replay.rb model
def self.last_two_thousands_by_map_id(map_id)
includes(:players).where(map_id: map_id).order(id: :desc).limit(2000)
end