这是一个设计问题。你能否告诉我,我是否正在索引关键词,如下所示。
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)?
在这些数据上搜索正则表达式的性能如何?
答案 0 :(得分:2)
这是一个B树索引,就像在几乎所有数据库中一样,因此它具有O(log n)查找时间。
正则表达式搜索听起来像是需要进行全表扫描或全索引扫描,两者都是O(n)。如果表达式是前缀锚定的,那么它只需要扫描一个范围,但我想这仍然算作O(n)。
答案 1 :(得分:1)
如Thilo所述,MongoDB索引实现为“B-Tree”索引,从根本上说,MongoDB中的索引在操作上与其他数据库系统中的索引类似。 MongoDB here中的索引有一个很好的概述。
我建议您阅读indexing strategies和indexing operations,以帮助您实施,管理和设计。
为了帮助分析查询的性能并查看它们正在执行的操作,可以将explain()运算符附加到查询中。有关explain()
以及如何解释其输出的详细信息,请参阅here。
MongoDB使用PCRE表示正则表达式。用法记录为here。除了PCRE库中的限制之外,没有大小限制。与所有正则表达式一样,请记住构造不良的正则表达式的后果:)