MongoDB 索引

1. ensureIndex添加索引 
ensureIndex 函数帮助文档 
db.blog.ensureIndex(keypattern[,options]) - options is an object with these possible fields: name, unique, dropDups 
name:指定索引名称 
unique是否唯一索引 
dropDups:是否删除重复 
创建索引的缺点:每次插入、更新、删除时都会产生额外的开销,要尽可能少创建索引。每个集合默认的最大索引个数为64个。 
如果没有对应的键,索引会将其作为null存储,所以,如果对某个建立了唯一索引,但插入了多个缺少该索引键的文档,则由于文档包含null值而导致插入失败。 
例子 
> db.users.find() 
{ "_id" : ObjectId("4fc6d0c9387a7fee4eb6bfa9"), "name" : "aaa", "age" : 23, "sex" : "male" } 
{ "_id" : ObjectId("4fc6d0e5387a7fee4eb6bfaa"), "name" : "bbb", "age" : 25, "sex" : "male" } 
{ "_id" : ObjectId("4fc6d0f4387a7fee4eb6bfab"), "name" : "ccc", "age" : 25, "sex" : "male" } 
{ "_id" : ObjectId("4fc6d100387a7fee4eb6bfac"), "name" : "ddd", "age" : 25, "sex" : "male" } 
{ "_id" : ObjectId("4fc6d110387a7fee4eb6bfad"), "name" : "eee", "age" : 23, "sex" : "male" } 
> db.users.ensureIndex({"name":1,"age":-1},{"name":"userIndex"}) 
//1,-1代表索引方向 
//查找索引 
> db.system.indexes.find() 
{ "name" : "_id_", "ns" : "blog.users", "key" : { "_id" : 1 }, "v" : 0 } 
{ "_id" : ObjectId("4fc6d1d0387a7fee4eb6bfb1"), "ns" : "blog.users", "key" : { "name" : 1, "age" : -1 }, "name" : "userIndex", "v" : 0 } 


2. explain()监控索引使用情况 
> db.users.find({"name":"qff","age":23}).explain() 

        "cursor" : "BtreeCursor userIndex",//没有使用索引时为BasicCursor,索引存储在B树结构中,所以使用查询时候会使用BtreeCursor类型的游标,userIndex为使用索引的名称 
        "nscanned" : 1,//查找了多少个文档 
        "nscannedObjects" : 1, 
        "n" : 1,//返回文档的数量 
        "millis" : 50,//数据库执行查询时间 
        "nYields" : 0, 
        "nChunkSkips" : 0, 
        "isMultiKey" : false, 
        "indexOnly" : false, 
        "indexBounds" : { 
                "name" : [ 
                        [ 
                                "qff", 
                                "qff" 
                        ] 
                ], 
                "age" : [ 
                        [ 
                                23, 
                                23 
                        ] 
                ] 
        } 


3. hint强制使用某个索引 
> db.users.find({"age":23,"name":/.*/}).hint({"name":1,"age":-1}) 
{ "_id" : ObjectId("4fc6d110387a7fee4eb6bfad"), "name" : "aaa", "age" : 23, "sex 
" : "male" } 
{ "_id" : ObjectId("4fc6d121387a7fee4eb6bfaf"), "name" : "bbb", "age" : 23, "se 
x" : "male" } 
{ "_id" : ObjectId("4fc6d11b387a7fee4eb6bfae"), "name" : "ccc", "age" : 23, "sex 
" : "male" } 
{ "_id" : ObjectId("4fc6d12b387a7fee4eb6bfb0"), "name" : "ddd", "age" : 23, "se 
x" : "male" } 
{ "_id" : ObjectId("4fc6d0c9387a7fee4eb6bfa9"), "name" : "eee", "age" : 23, " 
sex" : "male" } 
MongoDB的查询优化器非常智能,会替你选择该用哪个索引,多数情况下不需要指定的。 


参考推荐:

Create a Unique Index(官方文档)

MongoDB 索引

MongoDB基本管理命令

MongoDB 常用命令

MongoDB 基本操作


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值