查询并设置索引

  1. db.admin .find({“username”:”zhangs”}).explain(“executionStats”);

索引基础

索引是对数据库表中一列或多列

索引通常能够极大的提高查询的效率, 如果没有索引, MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录.
这种扫描全集合的查询效率是非常低的, 特别在处理大量的数据时, 查询可以要花费几十秒甚至几分钟, 这对网站的性能是非常致命的.
索引是特殊的数据结构, 索引存储在一个易于遍历读取的数据集合中, 索引是对数据库表中一列或多列的值进行排序的一种结构.

60万的数据
没有设置索引 查询某个数据需要 500毫秒左右
设置了索引 查询某个数据需要 10毫秒左右
再次查询同样的数据需要 0 毫秒

创建索引命令

  1. db.qq.createIndex({source:1})
  2. // 给 source 字段添加索引

升序: 1 降序: -1

  1. db.admin.ensurelndex()
  2. db.admin.ensureIndex({“username”:1}) 或者
  3. db.admin.ensureIndex({“age”:1})

获取当前表的索引

  1. db.admin.getIndexes()

删除索引命令

  1. db.admin.dropIndex({“username”:1})

复合索引

数字1 表示 username 键的索引按升序存储 , -1 表示age键的索引按照降序方式存储

  1. db.admin.ensureIndex({“username”:1,“age”:-1})

该索引被创建后,基于username和age 的查询将会用到该索引,或者是基于username的查询也会用到该索引,但只是基于age 的查询将不会用到该复合索引 . 因此可以说,条件中的键值顺序和复合索引中的创建顺序不一致的话, mongoDB可以智能的帮助我们调整顺序,以便使复合索引可以为查询所用,.

唯一索引

在缺省情况下创建的索引均不是唯一索引,下面的示例将创建唯一索引,如

  1. db.admin.ensureIndex({“age”:1},{“unique”,:true})


如果已经设置了 age为唯一索引,再次插入age重复的文档时,mongodb将报错,以提示插入重复键

  1. db.admin.insert({“age”:1})
  2. db.admin.insert({“age”:1})

此时就会报错,插入不进去,