新手问题 查询了 16W 数据,加载很慢,希望大家有时间帮忙看一看

ytsn · 2017年11月07日 · 最后由 ytsn 回复于 2017年11月07日 · 1458 次阅读

问题原因:

在加载新页面的时候,如下图代码,涉及到 Corpus.where(status: 1).sample,sample 函数是 rails 自带方法,作用是随机查询出一条数据,这样会在 16 万的数据查询一条出来,这样会导致页面加载很慢,请问大家,如何在 16 万或者更多的数据中随机查询一条数据,页面不会加载很慢,谢谢大家帮忙了

相关代码:

这个随机放到数据库层面来做就好了吧

# One record
  Corpus.order('rand()').take
# Array
  Corpus.order('rand()').limit(1)

order by rand()

同一个 request 中会对 query 结果做缓存,也就是这个条 query 在一次请求中,多次调用,结果是一样的。

大体机制是,缓存的 key 是最后生成的语句,有更新、创建之类的操作,缓存会过期。

希望没记错。。。

coderliu 回复

非常谢谢您,问题解决了

非常谢谢您提供的思路

Rei 回复

非常谢谢您提供的思路,谢谢

yfractal 回复

谢谢您的提醒,非常感谢

ytsn 关闭了讨论。 11月07日 16:09
需要 登录 后方可回复, 如果你还没有账号请 注册新账号