如何在大型mongodb集合中高效地查询数据?

ppn*_*012 5 mongodb mongodb-query

我有一个很大的mongodb集合(300万个文档,50 GB),即使我创建了索引,查询数据也会非常慢。

db.collection.find({"C123":1, "C122":2})
Run Code Online (Sandbox Code Playgroud)

例如,即使我已经为C123和创建了单独的索引,查询也会超时或非常慢(至少10s)C122

我应该创建更多索引还是增加物理内存来加快查询速度?

Ala*_*zek 6

对于这样的查询,您应该创建复合索引。在两个字段上都一个。然后它应该非常有效。创建单独的索引对您没有多大帮助,因为MongoDB引擎将首先使用它来获取查询的第一部分的结果,但是使用if则不会有太多帮助(甚至在某些情况下,由于在其中进行查找会减慢查询速度)索引表,然后再次在真实数据中)。您可以在外壳查询中使用.explain()来确认已使用的索引。

查看复合索引:

https://docs.mongodb.com/manual/core/index-compound/

在建立索引时,还要考虑两个字段的排序方向。


Ser*_*sev 2

答案很简单。

  1. 您不需要创建更多索引,您需要创建正确的索引。field 上的索引c124不会帮助 field 上的查询c123,因此创建它没有意义。

  2. 使用更好/更多的硬件。更多 RAM,更多机器(分片)。