mongoose find不同条件查询条件时间差别太大
向mongodb数据库中插入了112万条数据,model如下:
let testmodel = new mongoose.Schema({
updateTime:{type: Date, default: Date.now,},
f5Time:Date//刷新时间
});
testmodel.index({updateTime:-1,f5Time:1});//此处已经加了索引
let Testmodel = masterdb.model('Testmodel', testmodel);
分别用不同条件查询了两次
1. let s = Date.now();
Testmodel.find({"f5Time":{"$lte":new Date()}},{},{limit:5,sort:'-updateTime'},function(err,res){
if(err){
console.log(err);
}else{
console.log(‘长度:’,res.length);
}
let e = Date.now();
console.log('用时:',e-s);
})
//输出
5
用时: 63
2. let s = Date.now();
Testmodel.find({"f5Time":{"$gte":new Date()}},{},{limit:5,sort:'-updateTime'},function(err,res){
if(err){
console.log(err);
}else{
console.log(‘长度:’,res.length);
}
let e = Date.now();
console.log('用时:',e-s);
})
//输出
0
用时: 3063
为何两种查询条件用时差别那么大,已经对f5Time加了索引,测试了好几次,每次差别都很大,怎么优化呢? 满足第一种条件的文档数有100多万条,第二种条件的没有。
8 回复
@rrbe 加索引了,你没仔细看,如下
let testmodel = new mongoose.Schema({
updateTime:{type: Date, default: Date.now,},
f5Time:Date//刷新时间
});
testmodel.index({updateTime:-1,f5Time:1})
let Testmodel = masterdb.model('Testmodel', testmodel);复合索引,好像只能用,前面的索引查找. 也就是 Testmodel.find({"updateTime":new Date()}) 或者 Testmodel.find({"updateTime":new Date(),"f5Time":new Date()}) 都可以使用符合索引.但是 Testmodel.find({"f5Time":new Date()}}不行...没记错是这样的