MongoDB索引查询与建立

Jackey MongoDB 1,865 次浏览 没有评论

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} ) #因为是唯一索引,所以会报错

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Go