首页 > 开发 > 综合 > 正文

mongodb 的索引

2024-07-21 02:52:27
字体:
来源:转载
供稿:网友
            索引加快了查询速度,但是降低了写入速度。所以不要在没必要的属性上加索引。            在 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();
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表