问题标签 [mongodb-indexes]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1596 浏览

mongodb - Mongo - 2.2 中的复合分片索引

我正在阅读 2.2 的 Mongo Shard 密钥的文档,发现它有点混乱。

所有分片集合必须有一个以分片键开头的索引。如果您对尚未包含文档且没有此类索引的集合进行分片,则 shardCollection 将在分片键上创建索引。如果集合已包含文档,则必须在使用 shardCollection 之前创建适当的索引。

在 2.2 版更改: shard key 上的索引不再需要与 shard key 相同。该索引可以像以前一样是分片键本身的索引,也可以是分片键是索引前缀的复合索引。此索引不能是多键索引。

如果您有一个名为 people 的集合,使用字段 { zipcode: 1 } 进行分片,并且您想将其替换为字段 { zipcode: 1, username: 1 } 上的索引,则:

在 { zipcode: 1, username: 1 } 上创建索引: db.people.ensureIndex( { zipcode: 1, username: 1 } ); 当 MongoDB 完成索引构建后,您可以安全地删除 { zipcode: 1 } 上的现有索引: db.people.dropIndex( { zipcode: 1 } ); 警告分片键上的索引不能是多键索引。如上所述,如果用户名字段没有数组值,则 { zipcode: 1, username: 1 } 上的索引只能替换 zipcode 上的索引。

如果您删除了分片键的最后一个适当索引,请通过仅在分片键上重新创建索引来恢复。

我有几个关于分片键和索引的问题。

i) 从文档来看,2.2 之前似乎支持多键索引。如果是这种情况,复合索引与多键索引有何不同?

ii) [a] 以分片键开头的索引和 [b] 以分片键为前缀的索引有什么区别?

iii)关于分片键上的索引不应该是多键索引的警告说明是什么?db.people.ensureIndex( { zipcode: 1, username: 1 } 不是多键索引吗?

0 投票
1 回答
2061 浏览

mongodb - MongoDB:为什么不按多个键排序使用索引?

问题: 我有一个按字段索引的非常大的集合ts:(时间戳)

我想获得最后 5 个条目。令我惊讶的是查询不使用索引,因此非常慢:

但是,仅按或其他字段排序ts使用索引,因为它应该:

这是 MongoDB 中的一个错误,这确实是一个记录的功能还是我做错了什么?

附加信息:

0 投票
1 回答
268 浏览

mongodb - MongoDB 索引 2 个字段并让索引用于第 3 个字段的搜索

来自 MongoDB 文档

如果您有多个字段的复合索引,则可以使用它来查询字段的开始子集。因此,如果您在 a,b,c 上有一个索引,您可以使用它查询 [a] [a,b] [a,b,c]

所以可以说我有这个字段的文档

  1. 用户身份
  2. 姓名
  3. 国家
  4. 外场

我的索引订单是 [UserID,Name,Country]

所以如果我有类似的查询

此查询是否对前 3 个参数使用索引,然后在没有索引的情况下搜索 ExtraField?

如果是,那么这个查询也一样吗

0 投票
2 回答
4384 浏览

mongodb - MongoDB中唯一索引的优势

我试图搜索 Mongo 文档,但无法真正找到有关唯一索引查询是否比非唯一索引查询更快的任何详细信息(给定相同的数据)

所以我理解唯一索引将具有高选择性和良好的性能。但是,给定两个连接唯一的字段,非唯一复合索引的执行速度会比唯一复合索引慢吗?

我假设唯一索引可以减慢插入速度,因为必须验证唯一性。但是,唯一索引的读取性能提升(如果有的话)真的值得吗?

0 投票
1 回答
9857 浏览

arrays - 嵌入文档上的 mongo db 索引

我有一个域对象模型如下...

每个个人资料可以有许多社交资料,在每个社交资料中,通过特定的社交资料有许多与个人资料相关的兴趣(社交资料表示 Facebook 等社交网络),每个兴趣也是嵌入文档,具有 id 、 type 、 value 字段。

所以我有两个问题.. 我可以在嵌入式文档兴趣中单独索引几个字段吗?我可以在嵌入的文档兴趣中创建复合索引吗?

我猜我的模型中的复杂性是嵌入文档的深层,即 2.. 并且该文档的路径是通过数组...

可以通过元数据注释以春天的方式完成吗?如果您认为我的模型有误,请告诉我我是 mongo 的新手 谢谢

0 投票
3 回答
716 浏览

mongodb - 基于字段选择性的复合索引顺序

我有两个字段ab,其中b的选择性比a高得多。

现在,如果我只查询ab(从不单独查询任何一个字段),以下两个索引中哪个更好,为什么:

  1. {a: 1, b : 1}
  2. {b: 1, a : 1}

解释似乎返回几乎相同的结果,但我在某处读到您应该首先放置更高的选择性字段。我不知道为什么这会有意义。

0 投票
1 回答
461 浏览

mongodb - 联合索引如何在 mongodb 中工作?

在这个问题的评论中,我知道如何为排序操作创建索引:Mongodb 索引是如何工作的?

  1. 但我想知道,当我们在a&上创建联合索引时b,它与简单索引的工作方式有何不同?

  2. 为什么我们会从发现中受益a,但如果我们发现b,我们不会从中获得任何好处?联合索引是否就像连接a&一样b,所以我们将从 Prefix 中受益?

0 投票
1 回答
109 浏览

mongodb - mongodb中的复合索引在哪里发挥作用

我们从复合索引中获得了哪些优势。我的意思是假设我们有一个集合,我必须在其中索引 2 个字段,比如key1key2。它与复合索引 { key1:1, key2:1} 有什么不同。有 2 个单独的索引有什么问题。mongodb 不能使用 2 个或更多索引来满足查询。

0 投票
1 回答
4751 浏览

mongodb - 了解子文档数组的索引

我一直在研究 MongoDB 上的数组(多键)索引,并且我有以下问题,我无法找到很多文档:

子文档数组上的索引

因此,如果我有一个看起来像这样的数组字段:

我只是单独查询(不是一起查询) field.afield.c我相信我可以在以下选项之间进行选择:

  1. db.Collection.ensureIndex({field : 1});
  2. db.Collection.ensureIndex({field.a : 1}); db.Collection.ensureIndex({field.c : 1});

即:对整个数组的索引;或嵌入字段上的两个索引。现在我的问题是:

  • 您如何在选项 1 中可视化整个数组的索引(它甚至有用)?这样的索引对哪些查询有用?
  • 鉴于我描述的查询情况,以上两个选项哪个更好,为什么?
0 投票
1 回答
13503 浏览

mongodb - 我可以修改 MongoDB 中的现有索引而不删除它吗?

我可以修改 MongoDB 中的现有索引而不删除它吗?我在文档中没有看到任何关于它的内容。

我在 String 字段上有一个非唯一索引。集合是 ~6M 文件。是副本集。

我知道我可以删除索引并添加新索引。但由于两个原因,它是有问题的:

1)有时,当索引不存在时,一些查询会非常非常慢。2)添加新索引(在我的项目中)会在数据库上产生非常高的负载,这明显减慢了我的网站。