日期:2014-05-16  浏览次数:20524 次

MongoDB学习整理之索引

索引信息保存在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