我有一个简单的MongoDB集合,格式如下:
Items:[
{
TopicID : 1,
SubTopicID : 1,
TopicDescription : "ABC"
},
{
TopicID : 1,
SubTopicID : 2,
TopicDescription : "BCD"
},
{
TopicID : 2,
SubTopicID : 1,
TopicDescription : "CDE"
}
..
..]
我有200万件物品的清单。
在聚合管道上为此执行简单的$group
:
$group : {
_id : "$TopicID",
count: { $sum: 1 }
}
大约需要5秒钟(使用allowDiskUse : true
)
但是,将其分组到结构表中:
Items:
TopicID INT,
SubTopicID INT,
TopicDescription NVARCHAR(1000)
在类似配置的系统中,在SQL Server中获取SubTopics的计数只需要几秒钟。我在TopicID中为MongoDB和SQL Server表创建了索引。
以下是解释:
{
"stages" : [
{
"$cursor" : {
"query" : {},
"fields" : {
"TopicID" : 1,
"_id" : 0
},
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "mkl.Items",
"indexFilterSet" : false,
"parsedQuery" : {},
"winningPlan" : {
"stage" : "COLLSCAN",
"direction" : "forward"
},
"rejectedPlans" : []
}
}
},
{
"$group" : {
"_id" : "$TopicID",
"Count" : {
"$sum" : {
"$const" : 1.0
}
}
}
}
],
"ok" : 1.0
}
仅为TopicID
集合
Items
我有什么办法可以为这个用例增加mongodb性能吗?