2

关于 mongdb 中的索引,我遇到了这一特殊行。

在执行涉及更改索引条目的插入或更新时,集合上的每个附加索引都会产生一些开销。

这意味着就我的理解而言,如果集合上有更多的索引,它会在插入或更新期间降低性能。

那么复合索引总是比单一索引更好吗?

例如,如果我有一个名为stocks 的集合

并且它上面存在一个复合索引,如下所示

db.stocks.ensureIndex({"symbol":1,"date":1,"type": 1,"price":1},{"unique" : false})

以上各项指标均优于以下各项指标。

db.stocks.ensureIndex({"symbol" : 1}, {"unique" : false})
db.stocks.ensureIndex({"date" : 1}, {"unique" : false})
db.stocks.ensureIndex({"type" : 1}, {"unique" : false})
db.stocks.ensureIndex({"price" : 1}, {"unique" : false})

请让我知道我是否正确??

4

2 回答 2

1

我取决于您的查询,目前 MongoDB 每个查询只能使用一个索引,并且索引交集仍在路线图上(https://jira.mongodb.org/browse/SERVER-3071)但是所说的复合索引通过前缀工作. 例如,如果您要:

db.c.ensureIndex({s:1,d:1});

该索引适用于使用sandd或 onlys但不使用 only的查询d。所以复合索引并不总是最好的方法。

您还必须考虑:

在执行涉及更改索引条目的插入或更新时,集合上的每个附加索引都会产生一些开销。

取决于您更新的索引的大小和类型,而不仅仅是您拥有多少索引。例如,更新包含大文本区域的索引将非常慢。

例如,与两个较小的索引相比,这也适用于更新大型复合索引。

于 2013-08-26T16:37:22.427 回答
0

不。就MongoDB v2.6其对索引交集的支持而言,它实际上取决于您如何查询数据,因为:

  1. 复合索引通常比单个索引大,因此需要更多时间来更新。
  2. 复合索引仅支持所有索引字段或前缀,而单个索引支持任何顺序的每个字段子集。

如果您总是使用所有索引字段进行查询,那么最好使用复合索引,否则我将依赖索引交集及其带来的自由度。

于 2014-04-28T12:03:08.210 回答