【发布时间】:2015-03-04 15:56:56
【问题描述】:
我有一个关于索引查询性能下降的问题。我有一个由“COLOR”和“FLAVOR”两个字段索引的集合。该集合相当庞大,有 2700 万份文档。当我分别使用每个字段查询集合时,我得到了更快的回报
collection.find({'COLOR': 'BLUE'}).count()
collection.find({'FLAVOR': 'SWEET'}).count()
当我将这些字段组合成一个查询时,性能会大大降低。本质上,查询会无限期运行(无错误)。
collection.find({'COLOR': 'BLUE’},{'FLAVOR': 'SWEET'}).count()
任何想法为什么会发生这种情况?
【问题讨论】:
-
你在这些字段上使用了单一索引还是复合索引?
-
我使用了单个索引。
-
在您的情况下,您必须定义一个复合索引 collection.createIndex({'COLOR': 1, 'FLAVOR' : 1})
-
可能只是一个错字,但在您的组合查询中,您的语法实际上是查询 COLOR 为 BLUE 的文档,然后投影每个文档的 FLAVOR 字段,然后对其进行计数。您需要将两个字段放入一个对象中:
collection.find({COLOR: 'BLUE', FLAVOR: 'SWEET'}).count() -
感谢 JohnnyHK。错字出现在我的翻译中,而不是工作代码。