当有多个用于查询的列组合时,MongoDB是否合适,因此在所有列上创建索引是不可行的?例如,当您在列上没有索引并且该列有数百万条目时,MongoDB如何执行?
答案 0 :(得分:0)
如果没有索引,则执行表扫描,与任何数据库系统一样。
如果文档在内存中,这仍然会相对较快,但仍然会根据集合中的文档数量花费一定的时间,因为数据库必须查看每个文档。为O(n)
问题是每个文档都有一小组不同的密钥,或者每个文档必须包含大量的密钥?
面向列的数据存储必须存储大量列以模拟不同的属性,但由于文档数据模型,mongodb更灵活。
如果您的文档具有少量不同的属性(在一大组属性中),则这是可索引的,并且将为O(logn)。
您的文件如下所示:
{
"name":"some name",
"attrs":[
{"n":"subject","v":"the subject"},
{"n":"description","v":"Some amazing description"},
{"n":"comments","v":"Comments on this thing"},
]
}
像这样索引:
db.mycollection.ensureIndex({"attrs.n":1, "attrs.v":1})
并且可以这样查询:
db.mycollection.find({attrs: {$elemMatch: {n: "subject", v: "the subject"}}})