1. 查看索引
语法 :
db.集合名称.getIndexes()
2. 创建索引
语法 :
db.集合名称.createIndex(keys, options)
如:
- 单字段索引示例:对 userid 字段建立索引,升序:
db.集合名称.createIndex({userid:1})
- 复合索引:对 userid (升序)和 nickname (降序),同时建立复合(Compound)索引:
db.集合名称.createIndex({userid:1,nickname:-1})
参数解析:
- keys : 包含字段和值对的文档,其中字段是索引键,值描述该字段的索引类型。对于字段上的升序索引,请 指定值1;对于降序索引,请指定值-1。比如: {字段:1或-1} ,其中1 为指定按升序创建索引,如果你 想按降序来创建索引指定为 -1 即可。另外,MongoDB支持几种不同的索引类型,包括文本、地理空 间和哈希索引。
- options : 可选。包含一组控制索引创建的选项的文档。有关详细信息,请参见选项详情列表。
options(更多选项)列表:
background | Boolean | 建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 “background” 可选参数。 “background” 默认值为false。 |
---|---|---|
unique | Boolean | 建立的索引是否唯一。指定为true创建唯一索引。默认值为false. |
name | string | 索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名 称。 |
dropDups | Boolean | 3.0+版本已废弃。在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false. |
sparse | Boolean | 对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索 引字段中不会查询出不包含对应字段的文档.。默认值为 false. |
expireAfterSeconds | integer | 指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。 |
v | index version | 索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。 |
weights | document | 索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。 |
default_language | string | 对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语 |
language_override | string | 对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 languag |
3. 移除索引
可以移除指定的索引,和移除所有索引
a. 指定索引的移除
语法:
db.集合名称.dropIndex(index)
参数解析:
- index:指定要删除的索引。可以通过索引名称或索引规范文档指定索引。若要删除文本索引,请指定 索引名称。
如:
- 删除集合中 userid 字段上的升序索引:
db.集合名称.dropIndex({userid:1})
b. 移除所有索引
db.集合名称.dropIndexes()
4. 索引的使用
a. 执行计划
分析查询性能(Analyze Query Performance)通常使用执行计划(解释计划、Explain Plan)来查看查询的情况,如查询耗费的时间、是否基于索引查询等。
那么,通常,我们想知道,建立的索引是否有效,效果如何,都需要通过执行计划查看。
语法:
db.集合名称.find(query,options).explain(options)
如:
- 查看根据userid查询数据的情况:
db.集合名称.find({userid:"1003"}).explain()