renshanshan 发表于 2018-10-27 09:45:43

MongoDB中索引的一点记录

  在MongoDB中使用了一个联合索引,发现了一些问题,记录一下,方便以后查阅!
  首先来看表的说明:

  注意高亮出的索引:
  prop.lis_sta_1_prop.is_recom_-1_prop.re_t_-1_prop.post_t_-1,这4个字段分别是
  帖子状态、推荐状态,推荐时间,发贴时间
  测试了一下,有以下结果
  可以使用上面索引的查询:
db.post.find({'prop.lis_sta'{$in}}).sort({'prop.is_recom':-1,'prop.re_t':-1,'prop.post_t':-1}).explain();  
db.post.find({'prop.lis_sta':5}).sort({'prop.is_recom':-1,'prop.re_t':-1,'prop.post_t':-1}).explain();
  
db.post.find({'prop.lis_sta'{$in}}).sort({'prop.is_recom':-1,'prop.re_t':-1,'prop.post_t':-1}).limit(20).explain();
  不可以使用上面索引的查询:
db.post.find({'prop.lis_sta'{$in}}).sort({'prop.is_recom':-1,'prop.re_t':-1,'prop.post_t':-1}).explain();
  所以在这里说明几点:
  1)、尽量避免以灵活的参数的形式传递排序规则,如果数据比较多的话,却没有建立相关索引,容易产生问题。
  2)、修改了排序规则,要检查索引,通过explain来测试一下。
  3)、使用已有索引过滤掉尽量多的数据再排序,同时尽力保留limit限制,这个很重要。


页: [1]
查看完整版本: MongoDB中索引的一点记录