### 4.1、创建索引 索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。   索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构。   **语法格式:** ~~~shell db.集合名.createIndex(keys, options) ~~~   **参数说明:** | 参数 | 类型 | 描述 | | :-- | :-- | :-- | | background | Boolean | 建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 “background” 可选参数。 “background” 默认值为**false**。 | | unique | Boolean | 建立的索引是否唯一。指定为true创建唯一索引。默认值为**false**。 | | name | string | 索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。 | | sparse | Boolean | 对文档中不存在的字段数据不启用索引,这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为**false**。 | | expireAfterSeconds | integer | 指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。 | | v | index version | 索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。 | | weights | document | 索引权重值,数值在1到99999之间,表示该索引相对于其他索引字段的得分权重。 | | default\_language | string | 对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语。 | | language\_override | string | 对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language。 |   **案例演示:** (1)、单字段索引 ~~~shell db.comment.createIndex({"articleid":1}) ~~~ (2)、多字段索引 ~~~shell db.comment.createIndex({"articleid":1,"likenum":-1}) ~~~ (3)、其它的索引 * 地理空间索引(Geospatial Index):为了支持对地理空间坐标数据的有效查询,MongoDB提供了两种特殊的索引:返回结果时使用平面几何的二维索引和返回结果时使用球面 几何的二维球面索引。 * 文本索引(Text Indexes) :MongoDB提供了一种文本索引类型,支持在集合中搜索字符串内容。这些文本索引不存储特定于语言的停止词(例如“the”、“a”、“or”), 而将集合中的词作为词干,只存储根词。 * 哈希索引(Hashed Indexes):为了支持基于散列的分片,MongoDB提供了散列索引类型,它对字段值的散列进行索引。这些索引在其范围内的值分布更加随机,但只支 持相等匹配,不支持基于范围的查询。 > 注意:其它的索引了解即可,不做重点!