mongodb数据准备
use shijiange
for(i=1; i<=500000;i++){
db.myuser.insert( {name:'mytest'+i, age:i} )
}
mongodb有慢查询的概念,默认是超过100ms会记录慢日志mongodb.log
db.getProfilingStatus()
查询age为9999的,查看扫描的行数
db.myuser.find( {age:9999} )
db.myuser.find( {age:9999} ).explain(true) #使用explain可以查看是否全表扫描
添加索引,加快查询
db.myuser.getIndexes() #获取当前索引,默认有_id的索引,所以用_id查是比较快
db.myuser.ensureIndex( {age:1} ) #增加age的升序索引
db.myuser.getIndexes()
db.myuser.find( {age:9999} )
db.myuser.find( {age:9999} ).explain(true)
db.myuser.dropIndex( {age:1} ) #删除索引
使用正则的话,索引无效果
db.myuser.find( {"name":"mytest1"} )
db.myuser.ensureIndex( {name:1} ) #添加索引
db.myuser.find( {"name":"mytest6"} )
db.myuser.find( {"name":/99999/} )
db.myuser.find( {"name":/99999/} ).explain(true) #使用正则,全表扫描,也是慢
mongodb建立唯一索引,唯一索引对应的值不能重复
use shijiange
db.myuser.insert( {userid:1} )
db.myuser.insert( {userid:1} )
db.myuser.remove({}) #清空数据
db.myuser.ensureIndex( {userid:1},{unique:true} ) #创建唯一索引
db.myuser.insert( {userid:1} )
db.myuser.insert( {userid:2} )
db.myuser.insert( {userid:1} ) #因为是唯一索引,所以会报错