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()
,查询分析结果:
-
indexOnly: 字段为 true ,表示使用了索引
-
cursor:使用了索引是 BtreeCursor 类型的游标,没有使用索引时,游标的类型是 BasicCursor
-
hint
可以使用 hint 来强制 MongoDB 使用一个指定的索引