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

ytsn · November 07, 2017 · Last by ytsn replied at November 07, 2017 · 1451 hits

问题原因:

在加载新页面的时候,如下图代码,涉及到 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 是最后生成的语句,有更新、创建之类的操作,缓存会过期。

希望没记错。。。

Reply to coderliu

非常谢谢您,问题解决了

非常谢谢您提供的思路

Reply to Rei

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

Reply to yfractal

谢谢您的提醒,非常感谢

ytsn closed this topic. 07 Nov 16:09
You need to Sign in before reply, if you don't have an account, please Sign up first.