mongo索引

   不使用索引的查询称为全表扫描。通常来说,应该尽量避免全表扫描,全表扫描的效率非常低。
   创建索引:

db.runoob.ensureIndex({"name":1})

  • 复合索引

db.runoob.ensureIndex({"name":1,"sex":1})

  • 隐式索引
       N个键的索引,同时可以得到这个N个键的前缀组成的索引。
       {"a":1,"b":1,"c":1,...,"z":1}索引可以使用{"a":1}、{"a":1,"b":1}、{"a":1,"b","c":1}等一系列索引。

  • 低效率索引
       查询是否为空会全表扫描,例如({”name":{"$exists" :false}})。在索引中,不存在的字段和null字段存储方式是一样的,查询必须遍历每一个文档检查这个值是否真的为null还是根本不存在。
       "$ne"查询效率也比较低。“$ne"虽然可以实用索引,但是必须查看所有的索引条目,而不是指定的条目。
       "$nin"总是全表扫描。
       "$not" 有时能够使用索引,但是通常它并不知道如何使用索引。它能够对基本范围(比如将{"key" : "$lt" : 7} 变成 { “key" : {"$gte" : 7}}))和正则表达式进行反转。

  • 范围查询
       当有范围查询和精确查询一起事,精确查询放在前面。

  • OR查询
       "$or"查询会对每一个子句都使用索引,因为"$or"实际上是执行两次查询然后将结果集合并。

  • 索引对象和数组
      可以在嵌套文档和嵌套对象上建立索引,也可以在数组上建立索引,但是不能在数组对象上建立索引。

db.user.ensureIndex({"loc.city":1})

  • 索引基数
    &emsp  基数是集合中某个字段拥有不同值的数量。例如性别只有两个值:“男”和“女”。一个字段基数越高,这个索引就越有用,可以通过索引迅速找到一个比较小的结果集。
  • 索引类型
       唯一索引确保集合中每个文档指定键都是唯一值。

db.users.ensureIndex({"username" : 1}, {"unique" : true})

  • 索引管理
    ensureIndex和dropIndexes建立索引和删除索引。

db.foo.getIndexes() #得到索引信息
索引默认形式是keyname1_dir1_keyname2_dir2_..._keynameN_dirN,keynameX是索引键,dirX是索引的方向(1或者-1)。

你可能感兴趣的