8.1
mongodb的索引定义在collections级别,并且支持索引到一个document,或这个document的子部分。
索引可以用来进行两个方向的排序。
Cover Results:
覆盖索引的好处有两方向:
1.可以直接通过索引返回数据,不用再看别的地方。
2.不用把document拿入内存
Compound Index(复合索引)
复合索引的顺序非常重要,如果索引是{ userid:1 ,score : -1},那么索引是顺序首先是按userid排列,在每一个userid中,score按下降顺序排列。
multikey indexes
为了索引到一个包括数组的域,mongodb给数组中的每个成员都添加了一个索引项。multikey索引可以让mongodb使用数组的值返回document.mongodb会自己决定应不应该创建multikey。 multikey索引支持的数组的数据类型为:string,numbers和内嵌document
{
userid: "xyz",
addr:
[
{zip : "10036", ...},
{zip: "94301", ...}
],
}
{“addr.zip” : 1 }index
8.1.3 index properties
1.唯一性索引
2.稀疏索引:只包含加入索引的field.
3.TTL索引:可以让系统自动删除一些文档
8.1.4 index intersection
mongodb可以交互使用多个索引完成语句。
8.2.1
Behavior of Indexes
在mongodb中所有索引都是B-tree,可以高效的支持精确查询和范围查询。
索引在内部是顺序存储的,它的顺序是加了这个索引的域的顺序。
Ordering of Indexes
mongodb索引的排序可能是上升的也可能是下降的。尽管索引是有序的,但是mongodb遍历索引时,有时是顺序的有时是逆序的。
但是组合索引的顺序非常重要。
在local database 中的capped collection没有objectID
可以在内嵌域中创建索引,内嵌域中的索引不同于内嵌document的索引.
内嵌document索引将会把document的全部内容都装进索引中,直到超过索引的最大尺寸。
当要查询内嵌document时,field的顺序非常重要,必须完全匹配:
{
_id:ObjectId(...),
metro:{
city:"New York",
state:"NY"
},
name:"Giant Factory"
}
db.factories.find( { metro:{ city:"New York", state:"NY" } } )
上面两个查询只有第一个能查询到。