我有一个大的mongodb集合(300万个文档,50千兆字节),即使创建了索引,查询数据也会非常缓慢。如何在大型mongodb集合中高效查询数据?
db.collection.find({"C123":1, "C122":2})
例如,该查询将超时或将极端缓慢(至少10秒),即使我已创建了C123
和C122
的单独索引。
我应该创建更多索引还是增加物理内存来加速查询?
我有一个大的mongodb集合(300万个文档,50千兆字节),即使创建了索引,查询数据也会非常缓慢。如何在大型mongodb集合中高效查询数据?
db.collection.find({"C123":1, "C122":2})
例如,该查询将超时或将极端缓慢(至少10秒),即使我已创建了C123
和C122
的单独索引。
我应该创建更多索引还是增加物理内存来加速查询?
对于这样的查询,您应该创建复合索引。一个在两个领域。然后它应该是非常有效的。创建单独的索引对你来说无能为力,因为MongoDB引擎将首先使用第一部分查询的结果,但是如果使用第二部分将不会有多大帮助(甚至在某些情况下可能会减慢查询的速度索引表,然后再次在实际数据中)。您可以在shell中的查询中使用.explain()来确认使用的索引。
见复合索引:
https://docs.mongodb.com/manual/core/index-compound/
也可以考虑在这两个领域的排序方向,同时使索引。
我想,Mongodb现在可以合并几年的索引。不过,化合物应该更好。 –
好点@SergioTulentsev,我做了一个编辑,我知道合并,但根据我的经验,这在大多数情况下并没有什么帮助。但说实话,我们应该这么说。 –
看来,我应该更多地考虑设计复合索引,因为这个集合中有400多个键。 – ppn029012
怎么了聚合框架标签?问题中的查询不使用它。 –
对不起,我认为'aggregate- $ match'与'find()'相同 – ppn029012