OR条件超过三个再和其他条件进行匹配 ,使用索引会发生改变:
3个条件以内
db.getCollection('var_stat').find({$and:[
{'$or':[
{'_id.chr':'7','_id.begin':143964266,'_id.refA':'A','_id.altA':'G'},
{'_id.chr':'7','_id.begin':143964269,'_id.refA':'A','_id.altA':'G'},
{'_id.chr':'7','_id.begin':143964268,'_id.refA':'A','_id.altA':'G'}
]}
,{'value.hSum.h1':{$gte:0}}]}).explain()
正常使用索引


超过3个条件,这里会进行全表扫描,查询超时,索引这里需要使用hint 强制使用 or里面需要的索引
db.getCollection('var_stat').find({$and:[
{'$or':[
{'_id.chr':'7','_id.begin':143964266,'_id.refA':'A','_id.altA':'G'},
{'_id.chr':'7','_id.begin':143964269,'_id.refA':'A','_id.altA':'G'},
{'_id.chr':'7','_id.begin':143964268,'_id.refA':'A','_id.altA':'G'},
{'_id.chr':'7','_id.begin':143964267,'_id.refA':'A','_id.altA':'G'}
]}
,{'value.hSum.h1':{$gte:0}}]}).hint({'_id_':1,'_id.begin':1})