我正在尝试在MongoDB中查询与查询的10000多个数据匹配的集合。即使使用索引,查询时间仍超过25秒。
例如,我有一个表People
和字段name, age
。
我需要获取年龄为25岁的People数据,如果查询找到匹配的对象为10000,则需要花费一些时间来获取整个数据。
我已经创建了像db.people.createIndex({"age":1})
在这里,如何减少查询时间
答案 0 :(得分:0)
运行db.collection.find()。explain()并确保实际上使用了索引。确保您没有https://docs.mongodb.com/manual/reference/explain-results/那里没有COLLSCAN。
如果您的文档具有一些/很多大属性,而您只需要一些属性,则尝试仅请求它们(例如,仅_id或_id和名称)。传输的数据越少,速度越快。
如果您的数据库不适合内存,请使其适合内存。一旦数据库不合适,性能将大大降低。
如果您不在分片群集上运行,请基于合理的分片密钥创建一个。年龄可能不是一个很好的选择,因为所有年龄等于25的文档最终都将集中在一个节点上。即使您有一台带有多个CPU的计算机,它仍然可能对您更好(如果您有足够的内存)。它甚至可能以其他方式起作用。如果一台计算机上有一个分片群集,而副本不适合内存,则最好只使用一个节点。