mongodb 的索引

3/7/2017来源:SQL技巧人气:2978

            索引加快了查询速度,但是降低了写入速度。所以不要在没必要的属性上加索引。             在 mongodb 中索引可以按倒序/正序创建,便于排序。             默认使用 b-tree 索引,2.4 版本后也允许创建 hash 索引,哈希索引在范围内查找和顺序查找上有明显的缺陷(因为插入的时候根据算法插入不同的位置,在读取的时候就会在硬盘上四处去查询,所以效率相对 Btree(二叉树) 就较低了)。 创建索引:          db.表名.ensureIndex({sn:1});                          //给 sn 列加索引(普通索引),1 为正序,-1 为倒序。【表中有的数据没有这个索引字段时,也会创建索引,值为 null。根据 null 还可以查出这些不包含 sn 属性的数据 】            db.表名.getIndexes();                                      //查看当前表已有的索引(_id 的索引是默认创建的 )            db.表名.dropIndex({sn:1});                             //删除索引,一定要把类型也带上(1/-1)            db.表名.dropIndexs();                                     //删除所有索引(_id索引是不会被删除的)            db.表名.ensureIndex({sn:1/-1,name:1/-1});    //添加复合索引(这两个字段经常被查询的话,要比单个在每个字段上加索引效率要高。因为索引把这两个字段联成一个整体)          db.表名.ensureIndex({goods.attr:1});               //给商品的属性(子文档)添加索引          db.表名.ensureIndex({email:1},{unique:true});                //添加 email 列为唯一索引          db.表名.ensureIndex({email:1},{sparse:true});                //给 email 列添加稀疏索引【表中有的数据不包含email 属性的会被忽略,这是稀疏索引跟普通索引的区别,根据 null 就查不出不包含 email 属性的数据】          db.表名.ensureIndex({field:'hashed'});                             //建立 hash 索引【可以给单个字段或文本字段上建立 hash 索引,不可以针对“多个列”建立 hash 索引 】          一个表经过多次修改之后,导致表的文件产生空洞,索引文件也是,可以通过索引的重建起到刷新的效果,提高索引的效率。_id 的索引也会被重建【重建索引】          db.表名.reIndex();