mongodb指南(翻译)(十七)
索引通常可以显著的提高查询性能。仔细考虑你的应用中会用到的查询种类这样你就可以定义相关的索引了。一旦索引定义完成,在mongodb中实际创建它们是很简单的。Mongodb的索引在概念上和MySQL等关系型数据库的索引非常相似。当你在某些情境下需要在MySQL中创建一个索引,这样的情境同样适用于Mongodb。
基本概念
一个索引就是一个数据结构,它收集集合中文档的指定字段的值。这种数据结构被Mongo的查询优化器用来对集合中文档进行快速分类和排序。从形式上讲,这些索引按“B-Tree”索引形式来实现的。
在shell中,你可以调用ensureIndex()创建一个索引,参数是一个指定一个或多个关键字的文档。参考前面mongo使用基本知识中例子,我们可以像下面这样对"j"字段建立索引:
db.things.ensureIndex({j:1});
ensureIndex()函数仅在该索引不存在时创建它。
一旦在集合上某个字段建立了索引,对这个字段的随机查询的访问速度会很快。没有这个索引的话,mongodb需要遍历所有文档来匹配查询中的字段:
db.things.find({j:2}); // fast - uses index
db.things.find({x:3}); // slow - has to check all because 'x' isn't indexed
在shell中查看集合中已经存在的索引,你可以运行:
db.things.getIndexes()
要查看数据库中所有的索引,可以运行:
db.system.indexes.find()
创建选项
ensureIndex函数的第二个参数是携带创建选项的文档/对象。这些选项有:
选项
值
默认值
background
true/false
false
dropDups
true/false
false
unique
true/false
false
sparse
true/false
false
v
索引版本。0=早于v2.0版本,1=更小/更快(当前)
1 in v2.0.除非特殊情境,默认使用1
页:
[1]