打赏

MongoDB OR 条件使用情况一(需要hint的情况)

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

 

posted @ 2020-01-09 10:54  Bear.Tirisfal  阅读(791)  评论(0编辑  收藏  举报