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})