文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

mongodb 索引相关

2024-04-02 19:55

关注

1.索引的相关介绍:

monggodb的索引也是一颗平衡二叉树,所以在传统数据库中的绝大部分的索引优化技术也是可用的.

注意:mongodb可以在任意方向上对数据进行遍历(这点和关系数据库中的索引不一样),但这个仅限于单键排序,对于多键排序索引的方向还是比较重要的.

下面是个单键排序无方向性的具体的例子:

mongodb 索引相关

 

上面是两个查询的执行计划,红色部分的参数表示,查询是否在内存中有排序操作,

从上面的例子中可以很明显的看出,无论是按照iage的降序还是升序排序,查询都没有在内存中有排序操作.

 

2.mongodb 中的索引类型比较多,我这里仅仅列出比较常见的索引类型,更多的索引类型,参见http://www.cnblogs.com/xinghebuluo/archive/2011/12/19/2293043.html

 

唯一索引:它保证跟已有文档的索引关键字重复的文档不会被插入

mongodb 索引相关

 

上面的的例子中已成功创建一个唯一索引.

 

 

复合唯一索引:多个键值组合的唯一索引。

复合唯一索引实例:

mongodb 索引相关

 

创建唯一索引的注意事项:

(1)唯一索引和不存在的关键字:

当保存到集合中的文档在索引字段没有值的话,它的索引字段会被赋值为null然后插入。就是说,你不可能在唯一索引中插入多个在某个索引字段都没有值的文档。(多个null值被认为是相等的值)

以下实例在唯一索引字段上插入多个null值报错.

 mongodb 索引相关


 

(2).对已经存在的重复值的字段创建唯一索引.

   如果直接创建唯一索引肯定是会报错的.

mongodb 索引相关

 

(3).如果一定要在这样的字段上创建唯一索引,可以在创建唯一索引的时候指定一个关键字dropDups来强制创建索引.但是这种创建索引的方法会删除集合中的数据,所以不建议使用这种方法。

 

使用dropDups强制创建索引范例:

mongodb 索引相关

 

 

稀疏索引:在mongdo的集合中,每个文档的键值对可以不一样(行的列数不一样),那么在一个索引中,字段可能在某个文档中,也有可能不在某个文档中,当字段不在某个文档中的时候,查询利用索引得到数据时默认情况下会将没有这个字段的文档查询出来.

mongodb 索引相关

以上实例中的查询,通过索引iage 得到了数据,但是将不包含iage字段的文档也查询出来了,  

这个时候可以通过稀疏索引将那些没有包含索引字段的文档过滤掉.

 

以下是一个通过稀疏索引过滤不包含索引字段的的文档的例子:

从执行计划中可以看到,查询是通过稀疏索引得到数据的,并且查询出来的结果集中全部包含iage字段(过滤掉了没有包含iage的文档).

mongodb 索引相关

 

3.索引管理:

查看制定集合下的索引信息       :db.collection.getIndexes();

查看当前架构下的所有索引信息   :db.system.indexes.find({});

创建索引:db.collection.ensureIndex({key:1}},{unique:true,dropDups:true});

hint({}):强制使用某个键值(索引)

还可以在后台建立索引db.collection.ensureindex({someFiled:1},{background:1})

优点:定期释放锁,以便客服端写入数据.

缺点:耗时较长

前台建立索引(默认):

优点:耗时相对较少

缺点:索引创建期间客服端不能写入数据


删除索引:db.collection.dropIndexes() ,db.collection.dropIndex(index)

重建索引:db.test.reIndex()

标识索引: db.collection.ensureIndex({key:1}},{name:"Index_name"});  

 

(1):查看指定集合的所有索引:db.colleciton.getIndexes();

 mongodb 索引相关

 

 

(2)查看当前架构下的所有索引信息   :db.system.indexes.find({});

 mongodb 索引相关

 

(3)创建索引:db.collection.ensureIndex({key:1},{unique:true,dropDups:true,sparse:true})

  上面是创建索引的标准语法,第二个大括号({unique:true,dropDups:true,sparse:true})为索引类型参数。

  Unique:表示唯一索引。

  Sparse:表示稀疏索引.

  dropDups:当索引字段中存在重复值时,强制删除重复的文档,该参数会丢失数据,不建议使用该参数.

 

(4)hint({}):强制使用某个键值(索引)

下面实例中,从执行计划可以看出,强制使用索引了。

 

mongodb 索引相关

 

 

(5).删除索引:db.collection.dropIndexes() ,db.collection.dropIndex(index)

   

  db.collection.dropIndexes():删除集合下面的所有索引.

  

mongodb 索引相关

 

集合test下面已经没有可删除的索引,_id_ 是系统自带的索引,无法手动删除.

 

  db.collection.dropIndex(index_name):删除指定索引

  mongodb 索引相关

 

 

(6).当索引效率低下的时候(可能是碎片较多),就需要重建索引了。db.test.reIndex() 。

  db.test.reIndex():重建索引

mongodb 索引相关

 

重建单个索引或是 集合下的所有索引。

 

  

4.执行计划解读:

正确解读一个查询的执行计划是优化查询的第一步,所以必须准确的读懂查询的执行计划:

mongodb 索引相关

 







 

 

 

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯