mongodb索引分类以及创建我就不多说了,如果想了解可以直接在百度上搜索,这里我说一下关于索引创建的个人想法。
1、优先给一些Id类字段添加索引,查询时可以缩小扫描范围。
2、创建联合索引时,索引字段顺序很重要,如果第一个字段和索引不匹配,则基本不会命中该索引。
3、有些索引创建后,特别是嵌套查询,比如说{ "audit.experts" : { "$elemMatch" : { "expertId" : "37add534bc554a8e80e8700ae19e55f6", "result" : { "$in" : ["success", "fail"] } } } },这个查询不添加索引需要5s ,添加索引{"audit.experts.expertId":1,"audit.experts.result":1}后无法命中索引,这时就需要强制使用索引,mongodb提供了hint来强制使用某一个索引。
4、在优化过程中,我还发现有一些查询(集合中的数据都是嵌套的),使用了索引(联合索引)反而比不是用索引更慢。
5、使用模糊查询的字段尽量不要添加到联合索引中,对查询效率影响比较小。
相关推荐
以下是关于MongoDB创建索引的一些详细知识点: 1. **创建索引的方法**: MongoDB 使用 `ensureIndex()` 方法来创建索引。尽管在较新的版本中,`createIndex()` 已经成为推荐的创建索引的方法,但`ensureIndex()` ...
11. 策略创建索引:创建索引应根据查询需求,如创建单键索引支持单键查询,或创建复合索引支持多种查询和排序。 12. 覆盖查询:当索引包含所有查询所需的信息时,可以进行覆盖查询,减少对原始文档的访问。例如,`...
创建索引后,我们可以使用 `getIndexes()` 和 `getIndexKeys()` 方法来查看所建索引。 ### 联合索引 联合索引是 MongoDB 中的一种复杂索引类型。它可以提高多个字段的查询性能。例如,我们可以创建一个名为 "a" 和...
4. **子文档索引**:MongoDB支持对嵌入式文档(子文档)的字段创建索引,如`Detail`字段的单列索引: ```csharp mongoCollection.Metadata.CreateIndex(new Document { { "Detail", 1 } }, false); ``` 同样,...
- **后台创建索引**:可以在运行时创建索引,而无需停止服务。 - **索引类型**: - **单字段索引**:基于单一字段创建的索引。 - **复合索引**:基于多个字段创建的索引。 - **唯一索引**:确保字段值唯一性的...
- **插入文档限制**:如果插入文档的索引字段值超过限制,MongoDB 将不会为该文档创建索引。这同样适用于使用 `mongorestore` 和 `mongoimport` 导入的数据。 4. **最大范围** - **索引数量限制**:每个集合最多...
- **创建索引**:MongoDB 使用 `ensureIndex()` 方法创建新索引。例如,`db.COLLECTION_NAME.ensureIndex({KEY:1})` 创建一个升序索引,其中`KEY`是字段名,`1`代表升序。`ensureIndex()` 方法接受一个可选参数`...
创建索引时,默认情况下,MongoDB 会对相关集合进行锁定,这可能导致在创建过程中对其他操作造成短暂的影响。为了避免这种情况,你可以选择在后台创建索引,这样索引构建过程不会阻塞其他读写操作。使用 `...
在MongoDB中,可以为嵌套文档创建索引,以优化包含这些文档的查询。这意味着如果文档内有子文档,确实需要为子文档的字段建立索引,因此选项B“在嵌套文档中创建索引时,不需要对子文档建立索引”也是错误的。 5. ...
2. 重新创建索引:可以使用 MongoDB 的命令来创建新的索引,例如,使用 db.collection.createIndex() 命令来创建索引。 3. 使用 SpringBoot 的索引创建机制:可以使用 SpringBoot 的索引创建机制来创建索引,例如,...
- **查询模式**:根据应用程序的查询模式来确定应该为哪些字段创建索引。 - **写入性能**:虽然索引可以提高读取性能,但每次写入操作都可能需要更新索引,因此过多的索引可能会影响写入速度。 - **存储空间**:索引...
创建索引时还可以设置其他参数,例如`sparse`(稀疏索引)只索引包含指定字段的文档,`background`(后台创建)允许在不影响其他操作的情况下创建索引。 四、使用`explain` `explain`是分析查询性能的重要工具,它...
在MongoDB中,创建索引可以通过`ensureIndex()`命令来实现。例如,对于`username`字段建立升序索引(默认)的代码如下: ```javascript db.users.ensureIndex({"username": 1}) ``` 这里`1`表示升序,`-1`则表示...
缺省情况下,MongoDB的_id字段在创建集合的时候会自动创建一个唯一索引。本文主要描述唯一索引的用法。 关于什么是索引以及唯一索引这里就不做说明了,不清楚的可以自行谷歌或者百度。是什么引起我写这篇文章呢,这...
在使用TTL索引时,有一些注意事项需要了解: 1. 不能对已经建立索引的字段再次创建TTL索引,除非这些索引是基于唯一索引创建的。 2. 如果索引字段不是日期类型,或者字段上没有日期值,则不会导致文档失效。 3. TTL...
MongoDB提供了`ensureIndex()`方法来创建索引。这个方法的基本语法是`db.COLLECTION_NAME.ensureIndex({KEY:1})`。其中,`COLLECTION_NAME`是你要创建索引的集合名称,`KEY`是你选择的索引字段。数字1表示升序排列,...
MongoDB 的索引可以通过`ensureIndex()`函数创建,指定一个或多个字段来提升查询性能。例如,要按`username`字段建立升序索引,可以使用如下命令: ```javascript db.refactor.ensureIndex({"username": 1}) ``` ...