MongoDB部分索引在计数

时间:2018-04-30 08:11:24

标签: mongodb mongodb-query mongodb-indexes

mongoDB 3.6.3 上,我创建了这个包含200万条记录的集合:

function randInt(n) { return parseInt(Math.random()*n); }

for(var j=0; j<20; j++) {  
  print("Building op "+j);
  var bulkop=db.media.initializeOrderedBulkOp() ;
  for (var i = 0; i < 100000; ++i) {
    bulkop.insert(    
      {
        id_profile: NumberLong("222"),
        needle_id: NumberInt(randInt(2000000000)),
        visibility: NumberInt(randInt(5)),
      }
    )
  };
  print("Executing op "+j);
  bulkop.execute();
}

然后我创建了这个partial index

db.media.createIndex( 
  {"id_profile": 1, "visibility": 1}, 
  {unique: false, partialFilterExpression: { "needle_id": { $exists: true } }} 
); 

然后我运行这个与部分索引完全匹配的查询:

db.media.count({$and:[
  {id_profile:NumberInt(222)},
  {visibility:NumberInt(0)},
  {needle_id:{$exists:true}}]}) 

但它很慢:(事实上,它的速度与我没有使用部分索引的速度相同,我需要过滤所有没有针头的文档:

db.media.createIndex( 
  {"id_profile": 1, "visibility": 1}, 
  {unique: false} 
); 

db.media.count({$and:[
  {id_profile:NumberInt(222)},
  {visibility:NumberInt(0)},
  {needle_id:{$exists:true}}]}) 

这是部分索引的错误吗?我能做些什么来加速我的计算?

0 个答案:

没有答案