我的查询如下:
db.Users.find({
"Profile.Type" : {
"$ne" : NumberInt(4)
},
"JoinDate" : {
"$gte" : ISODate("2016-08-09T23:00:00.000+0100"),
"$lte" : ISODate("2016-08-10T23:00:00.000+0100")
},
"Category" : {
"$ne" : null
}})
运行需要大约8秒 - 这似乎很长一段时间!数据库中大约有200万行,此查询大约有10,000个。
我有一个索引(我认为应该有帮助)
{
"Profile.Type" : 1.0,
"Category" : 1.0,
"JoinDate" : 1.0,
"Profile.ParentUserIds" : 1.0,
"Profile.AdminId" : 1.0
}
还有一个只是
{
"JoinDate" : 1.0
}
...我提到的是因为.explain()似乎暗示它使用的是第二个索引,而不是第一个索引。
有什么想法吗?
答案 0 :(得分:0)
尝试使用hint()强制使用第一个索引并查看性能是否有所提高(应减少扫描文档的数量)
db.Users.find({
"Profile.Type" : {
"$ne" : NumberInt(4)
},
"JoinDate" : {
"$gte" : ISODate("2016-08-09T23:00:00.000+0100"),
"$lte" : ISODate("2016-08-10T23:00:00.000+0100")
},
"Category" : {
"$ne" : null
}}).hint({
"Profile.Type" : 1.0,
"Category" : 1.0,
"JoinDate" : 1.0,
"Profile.ParentUserIds" : 1.0,
"Profile.AdminId" : 1.0
})