在mongoDB中搜索索引数据的复杂性(Big-O)是多少?

时间:2012-08-02 11:52:56

标签: regex json performance mongodb

这是一个设计问题。你能否告诉我,我是否正在索引关键词,如下所示。

obj = {
    name: "Apollo",
    text: "Some text about Apollo moon landings",
    tags: [ "moon", "apollo", "spaceflight" ]
}

确保这样的指数。

db.articles.ensureIndex( { tags: 1 } );

和频繁查询如下。

db.articles.findOne( { tags: "apollo" } ).name

如果我插入了这样的文件,请告诉我这种查询的表现。

是O(1)?

在这些数据上搜索正则表达式的性能如何?

2 个答案:

答案 0 :(得分:2)

这是一个B树索引,就像在几乎所有数据库中一样,因此它具有O(log n)查找时间。

正则表达式搜索听起来像是需要进行全表扫描或全索引扫描,两者都是O(n)。如果表达式是前缀锚定的,那么它只需要扫描一个范围,但我想这仍然算作O(n)。

答案 1 :(得分:1)

如Thilo所述,MongoDB索引实现为“B-Tree”索引,从根本上说,MongoDB中的索引在操作上与其他数据库系统中的索引类似。 MongoDB here中的索引有一个很好的概述。

我建议您阅读indexing strategiesindexing operations,以帮助您实施,管理和设计。

为了帮助分析查询的性能并查看它们正在执行的操作,可以将explain()运算符附加到查询中。有关explain()以及如何解释其输出的详细信息,请参阅here

MongoDB使用PCRE表示正则表达式。用法记录为here。除了PCRE库中的限制之外,没有大小限制。与所有正则表达式一样,请记住构造不良的正则表达式的后果:)