插入图片就报错,profiler在生产也截不出来,只能口述一下请各位大佬解惑了。
目前有一个索引A是{‘a’:1,’duration’:1,’time’:-1},还有一个索引B是{‘a’:1,’c’:1,’d’:1,’time’:-1}以及C是{‘a’:1,’e’:1,’f’:1,’g’:1,’time’:-1}
此时我的查询语句为find({‘a’:’1234′,’duration’:{$gte:200},’time’:{$gte:ISODate(‘2022-01-01’)}}).sort({‘time’:-1})
我的预期是使用索引A,但是实际上使用的B或者C。请问各位大佬这是因为什么呢
我的查询语句是
db.collection.find({“business_fields.center_id”:”8629″,
“recordDuration”:{$gte:600},
“business_fields.dial_starttime”:{$gte:ISODate(“2021-12-01”)}
}).sort({“business_fields.dial_starttime”:-1})
WinningPlan命中的索引是
{“business_fields.center_id”:1,
“business_fields.list_type”:1,
“business_fields.list_detail”:1,
“business_fields.dial_starttime”: -1}
RejectedPlan命中的索引是
{“business_fields.center_id”:1,
“recordDuration”:1,
“business_fields.dial_starttime”: -1}
涉及字段的数据结构是这样的
{”xxx”:”xxx”,
“recodDuration”: 996,
“business_fields”:{“xxx”:”xxx”,
“center_id”:”8629″,
“dial_starttime”:ISODate(“2021-12-25”)
“list_type”:”XIV”,
“list_detail”:”XII”,
“XXX”:”XXX”
},
“XXX”:”XXX”
}
感谢大佬,请问是说问题是因为查询的字段是对象里的嵌套字段导致的吗,可是我也对这个嵌套字段做了索引,这与非嵌套字段有什么区别会导致不会使用这个索引呢