1.索引简介
MongoDB是基于集合建立索引(index),建立索引的目的是为了提高查询速度。MongoDB的索引基于B-tree数结构及对应算法形成的。
默认情况下,在建立集合的同时,MongoDB数据库自动为集合_id建立唯一索引
,可以避免重复插入同一_id值的文档记录。
2.索引种类
2.1 单一字段索引
语法:db.collection_name.createIndex({
说明:对一个集合文档的键建立索引,key为键名,n=1为升序,n=-1为降序
示例:
// 插入记录 db.bookInfo.insert( { _id:100, title:"书单1", amount:120, unit:"RMB", detail:[ {name:"西游记",price:98}, {name:"三国演义",price:120} ], overview:{shopName:"当当网",shopNum:37} } ) // 为name建立索引 db.custInfo.createIndex( { title:1 //正序 } ) // 嵌套文档建立索引 db.custInfo.createIndex( { "detail.name":1 //正序 } )
2.2 字段值唯一索引
语法:db.collection_name.createIndex({
说明:对一个或者多个字段建立唯一索引。key为键名,n=1为升序 n=-1为降序
示例:
// 唯一索引 db.custInfo.createIndex( {name:-1}, {unique:true} )
注意:建立了name键的唯一索引后,往集合custInfo中插入数据时,如果name重复,则无法正常插入。
2.3 多字段索引
语法:db.collection_name.createIndex({
说明:对两个或者两个以上的字段建立索引。key为键名,n=1为升序 n=-1为降序
示例:
// 多字段索引 db.custInfo.createIndex( { title:-1, unit:1 } )
2.4 文本索引
语法:db.collection_name.createIndex({
说明:在集合里,为文本字段内容的文档建立文本索引。
示例:
db.custInfo.createIndex({name:"text"})
2.5 哈希索引
语法:db.collection_name.createIndex({key:"hashed"})
说明:key为含有哈希值的键
示例:
db.custInfo.createIndex({_id:"hashed"})
2.6 ensureIndex()索引
语法:db.collection_name.ensureIndex({{key1:n},{key2:n},{key3:n},...},option)
说明:key1,key2,key3...是集合里的键名,n=1为升序,n=-1为降序;option为可选参数
示例:
db.custInfo.ensureIndex({_id:"hashed"})
3.与索引相关的其他方法
(1) db.collection.dropIndex(index):移除集合指定的索引功能,index参数为指定需要删除的集合索引名。可以使用getIndexes()函数获取集合的所有索引名称。 (2) db.collection.dropIndex():删除集合内的所有索引功能 (3) db.collection.getIndexes():返回一个指定集合的现有索引描述信息的文档数组。 (4) db.collection.reIndex():重构索引,如果数据量较大,不建议执行该命令,会对服务器造成性能压力 (5) db.collection.totalIndexSize():提供指定集合索引大小的报告信息
示例:
> db.custInfo.getIndexes() // 查看集合下的所有索引 [ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "test.custInfo" }, { "v" : 2, "key" : { "_id" : "hashed" }, "name" : "_id_hashed", "ns" : "test.custInfo" } ] > db.custInfo.dropIndex("_id_hashed") // 删除索引 { "nIndexesWas" : 7, "ok" : 1 }
来源:https://www.cnblogs.com/OliverQin/p/12312264.html