专栏首页MongoDB中文社区常见问题:索引

常见问题:索引

本文档解决了有关MongoDB 索引的一些常见问题 。有关索引的更多信息,请参阅 索引

如何创建索引?

要在集合上创建索引,请使用 db.collection.createIndex()方法。创建索引是一种管理性操作。通常,应用程序不应该定期的调用db.collection.createIndex()

注意:

索引构建会影响性能; 请参阅 索引构建会如何影响数据库性能?。管理员应在构建索引之前考虑性能影响。

索引构建会如何影响数据库性能?

在集合上构建索引时(译者注:前台创建时),保存集合的数据库在索引构建完成前都不可进行读取或写入操作。如果需要构建一个很大的索引,请考虑在后台(background)构建索引。请参阅 对已填充数据的集合进行索引构建操作在副本集上构建索引

要返回当前正在运行的索引创建操作的相关信息,请参阅Active Indexing Operations。要终止正在运行的索引创建操作,请参阅db.killOp()。部分构建的索引将被删除。

如何查看集合中存在哪些索引?

要列出集合的索引,请使用 db.collection.getIndexes()方法

如何查看查询是否使用了索引?

要探查MongoDB如何处理查询,请使用 explain()方法。

如何确定要索引的字段?

许多因素决定了要索引的字段,包括 选择性,对多个查询的支持以及索引的大小。更多信息,请参阅 索引策略索引操作注意事项

如何查看索引的大小?

db.collection.stats()结果包括一个indexSizes子文档,它提供了集合中每个索引的大小信息。

根据其大小,一个索引可能无法放入内存。当服务器有足够的内存用于索引和工作集的其余部分时,索引将加载进内存 。当索引太大而无法放入内存时,MongoDB必须从磁盘读取索引,这比从内存读取的操作要慢得多。

在某些情况下,索引不需要完全放入内存。有关详细信息,请参阅仅在内存中保留索引最近使用的值。

写操作如何影响索引?

写操作可能需要更新索引:

  • 如果写入操作修改了索引相关字段,MongoDB将更新所有键中包含该字段的索引。
  • 当使用MMAPv1存储引擎运行时,如果对文档的更新导致文档增长超过其分配的记录大小,MongoDB会将文档移动到新记录并更新引用该文档的所有索引,而不管修改的是什么字段。

因此,如果您的应用程序写入量大,索引可能会影响性能。

译者

钟秋

BBD技术经理,资深架构师,MongoDB中文社区联席主席

有丰富项目中应用MongoDB经验,熟悉MongoDB相互模式设计及性能优化,熟悉大数据相关技术和互联网及大数据应用架构设计

本文分享自微信公众号 - Mongoing中文社区(mongoing-mongoing)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-04-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 优化MongoDB复合索引

    对于一个MongoDB的复杂查询,如何才能创建最好的索引?在本篇文章中,我将展现一种给读请求定制的索引优化方法,这种方法会考虑读请求中的比较,排序以及范围过滤运...

    MongoDB中文社区
  • 玩转MongoDB: 索引,速度的引领

    数据库索引与书籍的索引类似,有了索引就不需要翻整本书,数据库可以直接在索引中查找,在索引中找到条目后,就可以直接跳到目标文档的位置,这可以让查找的速度提高几个数...

    MongoDB中文社区
  • 玩转MongoDB: 索引,速度的引领

    数据库索引与书籍的索引类似,有了索引就不需要翻整本书,数据库可以直接在索引中查找,在索引中找到条目后,就可以直接跳到目标文档的位置,这可以让查找的速度提高几个数...

    MongoDB中文社区
  • SQL Server 索引和表体系结构(聚集索引+非聚集索引)

    聚集索引 概述 关于索引和表体系结构的概念一直都是讨论比较多的话题,其中表的各种存储形式是讨论的重点,在各个网站上面也有很多关于这方面写的不错的文章,我写这...

    逸鹏
  • 我用对了这些场景下的索引,技术总监夸我棒

    生产上为了高效地查询数据库中的数据,我们常常会给表中的字段添加索引,大家是否有考虑过如何添加索引才能使索引更高效,考虑如下问题

    cxuan
  • 这样总结MySQL索引分类才好

    本文将大致介绍索引的类型、InnoDB的索引分类、如何创建索引、使用索引的注意事项等几个方面记录索引。由于侧重点的不同,本文不会全面介绍索引的知识点,例如二叉树...

    A梦多啦A
  • 我用对了这些场景下的索引,技术总监夸我棒

    生产上为了高效地查询数据库中的数据,我们常常会给表中的字段添加索引,大家是否有考虑过如何添加索引才能使索引更高效,考虑如下问题

    架构师修行之路
  • Oracle数据库,浅谈Oracle索引提高效率

    Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小微机环境。在关系数据库中,索引是一种单独的、物...

    用户1289394
  • 我用对了这些场景下的索引,技术总监夸我棒

    生产上为了高效地查询数据库中的数据,我们常常会给表中的字段添加索引,大家是否有考虑过如何添加索引才能使索引更高效,考虑如下问题

    kunge
  • MongoDB入门系列——5.查询索引

    下图是一个10000行数据的文档,第一幅图是没有采用索引,用时0.009秒,第二幅图是采用索引,用时0.003秒。很明显用了索引速度快了不少。

    陈琛

扫码关注云+社区

领取腾讯云代金券