【发布时间】:2018-05-08 14:35:41
【问题描述】:
所以可能没有办法解决这个问题,但我想我会问:
我设置了一个 Postgresql 数据库。第一个表包含重放,每个重放都有 10 个独特的玩家(一个有很多关系)。我想根据我的搜索呈现一个 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 玩家,甚至是单个特定玩家的回放只需要几秒钟(第一次搜索本身也只需要几秒钟),所以我认为这是一个数量问题。
【问题讨论】:
-
你能贴出实际生成的sql查询吗?
-
第一次搜索:SELECT "players".* FROM "players" WHERE "players"."replay_id" = $1 然后搜索players时:SELECT "players".* FROM "players" WHERE "玩家"."replay_id" = $1 [["replay_id", 117217]] (每次重播)
标签: ruby-on-rails json ruby postgresql