我的搜索在制作时需要超过80秒,但在我的本地只有一秒(数据几乎相同)。我不知道接下来我会采取什么步骤。
查询如下:
@params = {search_field: 'kamil'}
User.only('username', 'email', 'name', 'role', 'utm_email').or({:"email" => /#{@params[:search_field]}/i},
{:"username" => /#{@params[:search_field]}/i},
{:"name" => /#{@params[:search_field]}/i}).explain()
我对dev()的开发输出:
https://gist.github.com/kamilski81/827f9b363b0392cc87d9
我的生产输出explain():
https://gist.github.com/kamilski81/c0b07b838ddfbdb97c61
我不确定从哪里拿它,因为输出看起来和我非常相似。 Dev正在运行mongodb-2.4.9并且正在运行mongodb-2.4.10
答案 0 :(得分:1)
您可以使用探查器。它将创建一个集合,其中包含高于阈值(默认为100毫秒)的每个操作的文档。
您应该使用shell打开它,并将阈值设置为大约60秒:
db.setProfilingLevel(1,60000)
执行操作并在集合中查找相关文档,您可以看到正在使用的索引,等待锁的时间,MongoDB
扫描的文档数等等。
有关分析器here
的更多信息