MongoDB 索引

索引

索引是特殊的数据结构,存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构,MongoDB 的索引存储在内存中,是B树结构

  • db.collection.createIndex(keys, options),使用createIndex() 方法创建索引

    • Key 值为要创建的索引字段,1 指定按升序创建索引,-1 指定降序

    # 创建索引:按k1升序
    db.collection.createIndex({"k1":1}})
    # 创建复合索引,按k2升序,k3降序
    db.collection.createIndex({"k2":1,"k3":-1}})
    • options 可选参数:

      • background,布尔值,建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 "background" 可选参数。 "background" 默认值为false

      • unique,布尔值,建立的索引是否唯一。指定为true创建唯一索引。默认值为false.

      • name,字符串,索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称

      • weights,索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重

  • getIndexes(),查看索引

  • totalIndexSize(),查看索引大小

  • dropIndexes(<index_name>),删除索引,可以指定索引名称删除

索引查询

使用索引查询有两个条件

  • 所有查询字段是索引的一部分

  • 所有查询返回的字段在同一个索引中

因为索引存在于RAM中,从索引中获取数据比通过扫描文档读取数据要快得多

_id在查询中会默认返回,如果索引字段没有包含 _id 字段,注意查询条件要添加 "_id":0 ,使查询结果不包含 _id字段

不能使用索引查询的情况:

  • 正则表达式及非操作符,如 $nin, $not, 等。

  • 算术运算符,如 $mod, 等。

  • $where 子句

查询分析

MongoDB 查询分析可以确保我们所建立的索引是否有效,是查询语句性能分析的重要工具

MongoDB 查询分析常用函数有:explain() 和 hint()。

  • explain

explain 操作提供了查询信息,使用索引及查询统计等。有利于我们对索引的优化

db.collextion.find({...}).explain(),查询分析结果:

  1. indexOnly: 字段为 true ,表示使用了索引

  2. cursor:使用了索引是 BtreeCursor 类型的游标,没有使用索引时,游标的类型是 BasicCursor

  • hint

可以使用 hint 来强制 MongoDB 使用一个指定的索引

posted @ 2020-12-20 17:16  hjy1995  阅读(169)  评论(0编辑  收藏  举报