索引
将表中的某一个或多个字段对应的所有字段值提取出来,使用一种可以快速查找的数据结构存储(即排序的数据结构,MongoDB使用的是B-Tree数据结构),同时存储上对应源数据的地址,在查询时,先经过索引查询该字段值,找到该字段值后,再根据索引内存储的源数据的地址直接获取源数据即可,使用索引可以大大提高查询、排序的效率
- 单键索引:存储单个字段的索引
- 组合索引:存储多个字段的索引,能支持前缀子查询,比如:三个键的索引
A,B,C
,可以支持A,B,C
,A,B
,A
的索引查询,但是不能支持B,C
,C
,B
的索引查询,因为索引是有序的,所以会导致第二个和第三个键在索引中是分散的,就无法做到快速查询 - 多键索引:存储单个字段的索引,但是该字段值为数组,MongoDB会将数组中的所有元素就加入到索引中,即数组中每个元素都存储着对应着源数据的地址
索引操作
db.collection.getIndexes()
:获取集合的所有索引db.collection.createIndex(document,options)
:为集合创建索引document
:指定创建索引的字段,正一升序,负一降序,升序降序会影响排序操作的效率options
:指定创建索引的特性unique
:创建唯一性索引,该字段将不能重复,包括null(字段不存在情况也是null)sparse
:创建稀疏性索引,只有该字段存在时(包括显式指定为null),该文档才会被加入索引,一般与unique
同时使用expireAfterSeconds
:索引若是时间,则会按照指定的生存时间删除文档(超过当前时间多少秒就会被删除),单位秒;只能用于单键索引,若该字段是包含多个时间的数组则会以最小时间为主,即数组中只要有一个时间过期就会被删除;MongoDB使用的是一个后台进程来检测并自动删除过期的文档,所以删除操作可能会有一定的延时的
db.collection.dropIndex(indexNameORdocument)
:删除集合的索引,可以指定索引名或创建索引时的对象db.collection.explain()
:显示执行集合,分析执行效率,后面需要链式调用需要分析的方法即可- 返回的文档中
stage
:代表查询时的方法IXSCAN
:索引扫描,或索引排序PROJECTION
:索引直接投影拿去COLLSCAN
:集合扫描FETCH
:数据源拿取SORT
:集合排序
- 返回的文档中
Comments NOTHING