日期:2014-05-16 浏览次数:20524 次
索引信息保存在system.indexes
创建索引:
db.c1.ensureIndex({age:1},{background:true})
1:升序 -1 :降序
background:是否后台创建索引
查询表的索引
db.c1.getIndexes()或db.system.indexes.find()
文档索引:即将索引建立在嵌入式文档类型的字段上。
db.factories.insert({name:"baidu",addr:{city:"beijing",state:"BJ"}})
db.factories.ensureIndex({addr:1})
db.factories.find({addr:{city:"beijing",state:"BJ"}}) --走索引
db.factories.find({addr:{state:"BJ",city:"beijing"}}) --不走索引且查询不出数据,因为顺序不一致
组合索引:
db.factories.ensureIndex({"addr.city":1,"addr.state":1})
db.factories.find({"addr.city":"beijing","addr.state":"BJ"}) --走索引
db.factories.find({"addr.city":"beijing"}) --走索引
db.factories.find({"addr.state":"BJ","addr.city":"beijing"}) --不走索引,因为顺序不一致
唯一索引:ensureIndex加入unique:true
db.t4.ensureIndex({firstname:1,lastname:1},{unique:true})
强制使用索引:使用hint命令,并不是所有操作走索引一定快
db.t5.insert({name:"liangzhangping",age:28}) --添加数据用来测试
db.t5.ensureIndex({name:1,age:1}) --创建索引
db.t5.find({age:{$lt:30}}).explain() --查看执行计划,看看有没有走索引
db.t5.find({age:{$lt:30}}).hint({name:1,age:1}).explain()
删除索引,使用dropIndex命令
1)删除表中所有索引,比如:删除t3表的所有索引
db.t3.dropIndexes()
2)删除表中某一个索引,比如:删除t4表在字段firstname上建立的索引:
db.t4.dropIndex({firstname:1})
重建索引:使用reIndex命令,例如重建t3表上所有的索引:
db.t3.reIndex()
优化器:profiler,用来分析操作的时间,以便于进行调试及优化,信息保存在system.profile中,system.profile是Capped Collection
启动profiler:
1)启动MongoDB时加上“-profile=级别”
/app/mongo/mongodb/bin/mongod --profile=2
2)在客户端执行db.setProfilingLevel(级别)命令,如:
PRIMARY> db.setProfilingLevel(1)
获取当前级别:db.getProfilingLevel()
级别:
&nbs