索引

1、索引作用

     索引提高查询速度,降低写入速度,权衡常用的查询字段,不必在太多列上建索引;

     在mongodb中,索引可以按字段升序/降序来创建,便于排序;

     默认是用btree来组织索引文件,2.4版本以后,也允许建立hash索引;

2、查看计划

     db.find(query).explain();

     "cursor" : "BasicCursor", ----说明没有索引发挥作用

     "nscannedObjects" : 1000 ---理论上要扫描多少行

     cursor" : "BtreeCursor sn_1", 用到的btree索引

3、常用命令

查看当前索引状态: db.collection.getIndexes();

         创建普通的单列索引:db.collection.ensureIndex({field:1/-1}); 1是升续 2是降续

删除单个索引

        db.collection.dropIndex({filed:1/-1});

一下删除所有索引

        db.collection.dropIndexes();

创建多列索引

       db.collection.ensureIndex({field1:1/-1, field2:1/-1});

创建子文档索引

       db.collection.ensureIndex({filed.subfield:1/-1});

创建唯一索引:

       db.collection.ensureIndex({filed.subfield:1/-1}, {unique:true});

创建稀疏索引:

        稀疏索引的特点------如果针对field做索引,针对不含field列的文档,将不建立索引.

        与之相对,普通索引,会把该文档的field列的值认为NULL,并建索引.

        适宜于: 小部分文档含有某列时.

                    db.collection.ensureIndex({field:1/-1},{sparse:true});

> db.tea.find();

{ "_id" : ObjectId("5275f99b87437c610023597b"), "email" : "a@163.com" }

{ "_id" : ObjectId("5275f99e87437c610023597c"), "email" : "b@163.com" }

{ "_id" : ObjectId("5275f9e887437c610023597e"), "email" : "c@163.com" }

{ "_id" : ObjectId("5275fa3887437c6100235980") }

如上内容,最后一行没有email列,

如果分别加普通索引,和稀疏索引,

对于最后一行的email分别当成null 和 忽略最后一行来处理.

根据{email:null}来查询,前者能查到,而稀疏索引查不到最后一行.


创建哈希索引(2.4新增的)

     哈希索引速度比普通索引快,但是,无能对范围查询进行优化.

     适宜于---随机性强的散列

      db.collection.ensureIndex({file:’hashed’});

 

重建索引

       一个表经过很多次修改后,导致表的文件产生空洞,索引文件也如此.

       可以通过索引的重建,减少索引文件碎片,并提高索引的效率.

      类似mysql中的optimize table

       db.collection.reIndex()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值