【发布时间】:2019-02-10 19:18:49
【问题描述】:
我在 MongoDB 中有一个包含 170 万个文档的集合,每个文档平均大小为 6kb。数据库位于合理的机器中,具有 6Gb 的 RAM 和 4 个内核
这个集合有一个索引来支持我的查询。该索引具有以下属性(字符串、字符串和日期),大小仅为 15 mb。 (在 MongoDB Compass 中验证)
{
"Unit" : 1.0,
"VendorCode" : 1.0,
"EmissionDate" : 1.0
}
但是,当我对集合运行以下查询时,返回需要很长时间。
db.Collection.find({
'Unit': '016406',
'EmissionDate': {$gte: new ISODate('2018-08-01')}
}, {
'Unit': 1,
'VendorCode': 1,
'EmissionDate': 1
})
根据我使用 SQL 数据库的经验,在这种大小的索引之上的此类查询会立即返回。但是,当我在MongoDB上运行时,通过机器中的shell或者Robo3T,需要10多分钟才能完成!
我的感觉是,当查询找到文档时,出于某种原因,Mongo 正在从存储中检索它。但这只是猜测。
我是否忘记考虑 MongoDB 的一些基本最佳实践?你能给我什么想法来调查这个问题?
【问题讨论】:
-
欢迎来到 StackOverflow!与其他数据库类似,了解 MongoDB 索引使用的一个很好的起点是Explain your query。使用您的
find(..)示例,您可以附加.explain('executionStats')以查看一些详细信息。如果您不确定如何解释结果,您可以编辑您的问题以包含输出。还请包括您的特定版本的 MongoDB 服务器 (x.y.z),因为行为或可用信息可能存在差异。
标签: mongodb performance